条件表达式
if表达式
(1) val s = if( ... ){ ... } else{ ... } (2) if(...){var s = ...} else{ var s = ....} 其中花括号可以省略,返回代码块的最后一个表达式,
若不同条件返回的对象不同,则返回的对象会取二者的共同超类
语句终止
scala可以通过;来终止一条语句,但是在scala中;不是必须的
块表达式和赋值
块表达式{},其中块中的程序代码自动返回最后一个表达式的值,其他程序不可访问块中的变量,
var a = { var i = 1; var j = 2; i * j } // a=1*2
以赋值语句结束的块返回Unit,如{ var i = 1; var j = 2} //返回Unit
因为赋值语句返回的是Unit,因此 x = y = 1时,在y=1时返回的是Unit,将Unit赋给了x,可能会出现类型不匹配的错误
输入和输出
print()不换行打印
println()换行打印
printf()类C风格的打印 printf("Hello:%s, age:%d", "Enche", 23)
使用readLine(), readInt(), readBoolean()...从控制台读取输入的数据
循环
do{ ... }while( ... ), while( ... ){ ... }
for(i <- 1 to n) // <-类似于 in
循环退出
scala中无continue和break来退出循环,但是可以通过
import scala.util.control.Breaks._
breakable{
....; break;
}
退出循环
高级for循环和for推导式
scala for循环中可以有多个生成器,使用;分开 for(i <- 1 to 5; j <- 2 to 10){ ....}
每个for循环可以有一个守卫,以if开头的Boolean表达式 for(i <- 1 to 5; j <- 2 to 10 if j==i){ ....} //如果if为true则执行代码块
循环中可以使用变量 for(i <- 1 to 10; from = i-2; j <- from to 10){ ... }
循环体以yield开始,生成一个集合 for(i <- 1 to 1o) yield{ i } //Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 这类循环叫做for推导式
for推导式生成的集合与第一个生成器是兼容类型 :
1) scala> for(i <- 1 to 3;j<-"abc") yield{ (i+j).toChar}
res1: scala.collection.immutable.IndexedSeq[Char] = Vector(b, c, d, c, d, e, d, e, f)
2)scala> for(i <- 1 to 3;j<-"abc") yield{ (i+j).toChar}
res1: scala.collection.immutable.IndexedSeq[Char] = Vector(b, c, d, c, d, e, d, e, f)
(前20页)