val/var 变量名 [:变量类型] = 变量值 |
def f1():Nothing= { //表示 f1 方法就是没有正常的返回值 ,专门用于返回异常 throw new Exception("异常发生") } |
数据类型 | 描述 |
Byte | 8位有符号补码整数。数值区间为 -128 到 127 |
Short | 16位有符号补码整数。数值区间为 -32768 到 32767 |
Int | 32位有符号补码整数。数值区间为 -2147483648 到 2147483647 |
Long | 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 |
数据类型 | 描述 |
Float | 32 位, IEEE 754 标准的单精度浮点数 |
Double | 64 位, IEEE 754 标准的双精度浮点数 |
数据类型 | 描述 |
Unit | 表示无值 ,和其他语言中void等同。用作不返回任何结果的方法的结果类型。 Unit只有一个实 例值 ,写成() |
Null | null 或空引用 |
Nothing | Nothing类型在Scala的类层级的最底端;它是任何其他类型的子类型 |
运算符 | 描述 | 实例 |
+ | 加号 | A + B 运算结果为 30 |
- | 减号 | A - B 运算结果为 -10 |
* | 乘号 | A * B 运算结果为 200 |
/ | 除号 | B / A 运算结果为 2 |
% | 取余 | B % A 运算结果为 0 |
运算符 | 描述 | 实例 |
= | 简单的赋值运算 ,指定右边操作数赋值给左边的操作数。 | C = A + B 将 A + B 的运算结果赋 值给 C |
+= | 相加后再赋值 ,将左右两边的操作数相加后再赋值给左边的 操作数。 | C += A 相当于 C = C + A |
-= | 相减后再赋值 ,将左右两边的操作数相减后再赋值给左边的 操作数。 | C -= A 相当于 C = C - A |
*= | 相乘后再赋值 ,将左右两边的操作数相乘后再赋值给左边的 操作数。 | C *= A 相当于 C = C * A |
/= | 相除后再赋值 ,将左右两边的操作数相除后再赋值给左边的 操作数。 | C /= A 相当于 C = C / A |
%= | 求余后再赋值 ,将左右两边的操作数求余后再赋值给左边的 操作数。 | C %= A is equivalent to C = C % A |
> 2 | ||
&= | 按位与运算后赋值 | C &= 2 相当于 C = C & 2 |
^= | 按位异或运算符后再赋值 | C ^= 2 相当于 C = C ^ 2 |
|= | 按位或运算后再赋值 | C |= 2 相当于 C = C | 2 |
运算符 | 描述 | 实例 |
== | 等于 | (A == B) 运算结果为 false |
!= | 不等于 | (A != B) 运算结果为 true |
> | 大于 | (A > B) 运算结果为 false |
</p/tdtdp小于/p/tdtdp(A < B) 运算结果为 true/p/td/trtrtdp>= | 大于等于 | (A >= B) 运算结果为 false |
> | 无符号右移 |
val num = StdIn.redInt() val res = if (num > 3) "比3大" else "比三小" println(res) |
if (条件表达式) { 执行代码块 } |
if (条件表达式) { 执行代码块1 } else { 执行代码块2 } |
if (条件表达式) { 执行代码块1 } else if (条件表达式) { 执行代码块2 } else if (条件表达式) { 执行代码块3 } ... |
if (条件表达式) { if (条件表达式) { 执行代码块1 } else { 执行代码块2 } } |
for(i < ‐ 1 to 3) { // 这里的 1 to 3 也可以是一个集合 前后闭合 (包括 1 和 3) print(i + " ") } |
for(i < ‐ 1 until 3) { //i的取值是1 和 2 ,until表示 前闭后开 的范围 print(i + " ") } |
for(i < ‐ 1 to 3 if i != 2) { //输出1 3 print(i + " ") } |
for(i < ‐ 1 to 3; j = 4 ‐ i) {//没有关键字 ,所以要加 ; 隔断逻辑 print(j + " ") } |
for(i < ‐ 1 to 3; j < ‐ 1 to 3) { println(" i =" + i + " j = " + j) } // 等价于 // 在业务复杂时使用 for (i < ‐ 1 to 3) { for (j < ‐1 to 3) { println(" i =" + i + " j = " + j) } } |
val res = for(i < ‐ 1 to 10) yield i * 2 println(res) |
for (i < ‐ Range(1,10,3)) { //遍历1 ‐ (10 ‐1),步长3 until println("i=" + i) } |
for (i < ‐ 1 to 10 if i % 3 == 1 ) { println("i=" + i) } |
while (循环条件) { 循环体(语句) 循环变量迭代 } |
循环变量初始化; do{ 循环体(语句) 循环变量迭代 } while(循环条件) |
//使用前需要导包 import util.control.Breaks._ //将需要通过breakable控制的代码放到breakable的大括号中 //相当于break,跳出整个循环 breakable { for (i < ‐ 1 to 10) { if (i == 5) { break() } println("i=" + i) } } //相当于continue,跳出本次循环 ,继续执行下一次循环 for (i < ‐ 1 to 10) { breakable { if (i == 5) { break() } println("i=" + i) } } |
//当i=4,5时跳过 for(i < ‐ 1 to 10){ if (i != 4 && i != 5) { println("i=" + i) } } for (i < ‐ 1 to 10 if (i != 4 && i != 5)) { println("i=" + i) } |
def 函数名 ([参数名: 参数类型], ...)[[: 返回值类型] =] { 语句 ... //完成某个功能 return 返回值 } |
def test(n:Int){ if (n>2){ test(n ‐1) } else { println(s"n = $n") } } // 输出n=2 |
def f1(name: String): Unit = { println(name + " hello ") } |
def main(args: Array[String]): Unit = { lazy val res = sum(1,2) println(" ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ") println("res=" + res) //当需要使用到 res 时 ,就会真正的开始计算 } def sum(n1:Int,n2:Int): Int = { println("sum 被调用 ..") n1 + n2 } |
object ScalaException { def main(args: Array[String]): Unit = { //scala 中去掉所谓的 checked (编译) 异常 //设计者认为 ,如果程序员编程时 ,认为某段代码可疑 ,就直接 try 并处理 //说明 //1. 如果代码可疑 ,使用 try 进行处理 //2. 在 catch 中 ,可以有多个 case ,对可能的异常进行匹配 //3. case ex: Exception => println("异常信息=" + ex.getMessage) // (1) case 是一个关键字 // (2) ex: Exception 异常的种类 // (3) => 表明后的代码是对异常进行处理 ,如果处理的代码有多条语句可以{}扩起 //4. 在 scala 中把范围小的异常放在后面 ,语法不会报错 ,但是不推荐 //5. 如果捕获异常 ,代码即使出现异常 ,程序也不会崩溃。 try { var res = 10 / 0 } catch { case ex: ArithmeticException => { println("算术异常=" + ex.getMessage) println("111") println("222") } case ex: Exception => println("异常信息=" + ex.getMessage) } finally { println("finaly 的代码 ...") } println("程序继续 ....") } } |
def main(args: Array[String]): Unit = { val res = test() println(res.toString) } def test(): Nothing = { throw new Exception("不对") } |
def main(args: Array[String]): Unit = { f11() } @throws(classOf[NumberFormatException]) //等同于 NumberFormatException.class def f11() = { "abc".toInt } |
val triple = (x: Double) => 3 * x pritnln(triple) // 类型 println(triple(3)) |
object NoNameFunction { def main(args: Array[String]): Unit = { //编写一个匿名函数 ,可以返回 2 个整数的和 ,并输出该匿名函数的类型 //如果我们定义一个函数 ,则变量名字要写 val f1 = (x1:Int,x2:Int) => { x1 + x2 } println(f1(10, 30)) // 40 println(f1) // //调用 f2 完成一个运算 println(f2(f1,30,40)) // 70 // f = f1 } //方法 ,可以接受一个函数 ,该函数返回两个数的差 //这时 ,我们只是写一个函数的格式(签名) def f2(f:(Int,Int) => Int, n1:Int,n2:Int): Int = { f(n1,n2) } } |
def test(f: Double => Double, n1: Double) = { f(n1) //调用 f 函数 } // def sum(d: Double): Double = { d + d } val res = test(sum, 6.0) println("res=" + res) def minusxy(x: Int) = { (y: Int) => x – y // 函数表达式 , 返回的是一个匿名函数 } //说明 //minusxy 高阶函数 返回的是 (y: Int) => x – y 匿名函数 //minusxy(3) => 返回的就是一个具体的匿名函数 (y: Int) => 3 – y val result3 = minusxy(3)(5) println(result3) //minusxy(3)(5) => 3 – 5 = ‐2 |
def minusxy(x: Int) = (y: Int) => x – y //说明 //1. minusxy 返回了 (y: Int) => x – y 匿名函数 //2. 使用到 x 值 ,x 是它引用到的一个环境变量 //3. 匿名函数和 x 组合成一个整体 ,构成了一个闭包 //4. f 就是一个闭包 val f = minusxy(20) println("f(1)=" + f(1)) // 19 println("f(2)=" + f(2)) // 18 |
// Currying def add(a: Int)(b: Int): Int = a + b println(add(4)(3)) val addFour = add(4) _ // val addFour: Int => int = add(4) println(addFour(3)) |
// pass by value def f0(a: Int): Unit = { println("a: " + a) println("a: " + a) } f0(10) // pass by name, argument can be a code block that return to Int def f1(a: => Int): Unit = { println("a: " + a) println("a: " + a) } def f2(): Int = { println("call f2()") 10 } f1(10) f1(f2()) // pass by name, just replace a with f2(), then will call f2() twice f1({ println("code block") // print twice 30 }) |
// built ‐in while var n = 10 while (n >= 1) { print(s"$n ") n-= 1 } println() // application: self ‐defined while, implement a function just like while keyword def myWhile(condition: => Boolean): (=> Unit) => Unit = { def doLoop(op: => Unit): Unit = { if (condition) { op myWhile(condition)(op) } } doLoop _ } n= 10 myWhile (n >= 1) { print(s"$n ") n ‐= 1 } println() // simplfy def myWhile2(condition: => Boolean): (=> Unit) => Unit = { op => { if (condition) { op myWhile2(condition)(op) } } } n= 10 myWhile (n >= 1) { print(s"$n ") n ‐= 1 } println() // use currying def myWhile3(condition: => Boolean)(op: => Unit): Unit = { if (condition) { op myWhile3(condition)(op) } } n= 10 myWhile3 (n >= 1) { print(s"$n ") n ‐= 1 } println() |
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |