Scala中的变量分为两种:可变var和不可变val,注意val声明的变量,值不能被修改,否则会报错。

无论声明val变量,还是var变量,都可以手动指定变量的类型。如果不指定,Scala会自动根据值,进行类型推断。

# 数据类型

Scala中的数据类型可以分为两种,基本数据类型和增强版数据类型

  • 基本数据类型有: Byte、Char、Short、Int、Long、Float、Double、Boolean
  • 增强版数据类型有: StringOps、RichInt、RichDouble、RichChar 等

Scala使用这些增强版数据类给基本数据类型增加了上百种增强的功能,例如RichInt提供的有一个to函数, 1.to(10) ,此处Int会先隐式转换为RichInt,然后再调用其to函数。

scala> 1 to 10
res2: scala.collection.immutable.Range.Inclusive = Range 1 to 10
scala> 1.to(10) // 两种写法都可以
res4: scala.collection.immutable.Range.Inclusive = Range 1 to 10

Scala提供的操作符:如 +、-、*、/、%&、|、^、>>、<<都是支持的,但是不支持++、--操作符。

# if表达式

在Scala中,if表达式是有返回值的,就是if或者else中最后一行语句返回的值, 这一点和java中的if是不一样的,java中的if表达式是没有返回值的。

scala> val age = 20
age: Int = 20

scala> if(age > 18) 1 else 0
res5: Int = 1

如果if语句后面没有跟else,那么默认的else值是Unit,也可以用()表示,类似于Java中的void或者null。

scala>  if(age< 18) "old"
res8: Any = ()

# for循环

for循环基础语法如下:

for (元素 <- 集合) {
    // 循环体,对每个元素执行操作
}

例如:打印1~10,1 to 10获取1~10之间的所有数字,1 until 10获取1~9之间的所有数字。

for (i <- 1 to 10)
print(i + "\t")

for循环只有一行可以省略花括号,也可以写到一行上,如果是多行就需要{}修饰。

# while循环

while循环语法和java倒是类似:

var n = 10
while(n>0) {
    print(n +"\t")
    n -= 1
}

# 高级for循环

在Scala中,if守卫是一种强大的语法特性,它不仅可以作为赋值语句使用,还能作为守卫语句。这种特性使得Scala的if语句在使用上远远超过了Java和Python。

具体到for循环中,if守卫的作用是帮助我们直接在循环过程中判断元素是否满足某种条件。例如,我们想要获取1~10之间的所有偶数,传统的for循环实现需要把每一个数字都循环出来,然后判断是否是偶数。而如果在for循环中使用if守卫,就可以在循环的同时判断数值是否为偶数,从而提升代码的效率。

for (i <- 1 to 10 if i % 2 == 0) 
	print(i+"\t")

我们有一个集合,我们想获取集合内每个元素*2的数据

for (i <- 1 to 10) yield i * 2