Scala 学习(1)之「变量,数据类型,if 表达式,循环」
@
变量
可变变量(var):赋值后可以改变,生命周期中可以被多次赋值。语法:var 变量名称: 类型 = xxx
不可变变量(val):赋值后不可变,类似于 Java 中的 final 变量,值一旦初始化了就不能再改变。语法:val 变量名称: 类型 = xxx
大多数情况下推荐使用 val 来声明变量,因为可以防止变量的值被错误修改,提高程序的健壮性和安全性。
数据类型
Byte // 8 位有符号值,范围从 -128 至 127
Short // 16 位有符号值,范围从 -32768 至 32767
Int // 32 位有符号值,范围从 -2147483648至 2147483647
Long // 64 位有符号值,范围从 -9223372036854775808 至 9223372036854775807
Float // 32 位IEEE 754 单精度浮点值
Double // 64 位IEEE 754 双精度浮点值
Char // 16 位无符号 Unicode 字符。范围从 U+0000 到 U+FFFF
String //一个 Char 类型序列
Boolean //文字值 true 或文字值 false
Unit //表示无值,和其他语言中 void 等同。用作不返回任何结果的方法的结果类型。Unit 只有一个实例值,写成()
Null // null 或空引用
Nothing // Nothing 类型在 Scala 的类层级的最低端:它是任何其他类型的子类型
Any // Any 是所有其他类的超类
AnyRef // AnyRef 类是 Scala 里所有的引用类(reference class)的基类
类型转换
// 强制转换成Double类型
var i = 10.asInstanceOf[Double]
类型判断
// 判断是否为Int类型
val b = 10.isInstanceOf[Int]
if表达式
在 Scala 中,if表达式是有值的,可以将 if 表达式赋予一个变量.
例如:val isAdult = if(age > 18) 1 else 0
类型推断
当 if 和 else 子句的值类型不同时,此时 Scala 会自动进行推断,取两个类型的公共父类型。
例如:if (age > 18) "adult" else 0,此时 if 和 else 的值分别是 String 和 Int ,则表达式的值是 Any , Any 是 String 和 Int 的公共父类型。
将if语句放在多行中
在 shell 端可以使用 :paste
进入多行模式,写完代码之后按 ctrl+D
退出多行模式。
一行放多条语句
默认情况下:Scala 不需要语句终结符,默认将每一行作为一个语句,如果要实现一行放多条语句,则可使用下面的方式来实现
示例:var a, b, c = 0; if(a < b) {b = b + 1; c = c + 1}
或采用花括号的方式
if (a < b) {
b = b + 1
c = c + 1
}
块表达式
指的是 {} 中的值,其中可以包含多条语句,最后一个语句的值就是表达式的返回值。
循环
while do
// 当变量 n 大于 0 的时候,输出并减一,否则,跳出循环
var n = 10
while(n > 0) {
println(n)
n -= 1
}
简易for循环
var n = 10
for (i <- 1 to n) println(i)
for (c <- "Hello World") println(c)
until
//该表达式的值达不到上限
for (i <- 1 until n) println(i)
跳出循环语句
import scala.until.control.Breaks._
breakable {
var n = 10
for(c <- "Hello World") {
if(n == 5) break;
print(c)
n -= 1
}
}
多重for循环
// 九九乘法表
for (i <- 1 to 9; j <- 1 to 9){
if(j == 9){
println(i * j)
} else {
print(i * j + " ")
}
}
if守卫
// 取出偶数
for (i <- 1 to 100 if i % 2 == 0){
println(i)
}
for推导式
// 将输出的值生成一个集合
for (i <- 1 to 10) yield i
欢迎关注,本号将持续分享本人在编程路上的各种见闻。