1、在Scala中,几乎所有的语法结构都有值。
注意:Scala行尾不需要分号,如果单行中写多个语句,则需要分号分割,()一行表达式,{}多行表达式
Scala并没有提供break和continue语句,如果需要break可以用:
1)使用Boolean类型的控制变量
2)使用嵌套函数,从函数中return
3)使用Breaks对象的break方法
2、if else语句返回类型取决于最后一条语句,如果返回类型不一样,就返回Any类型(所有类型的公共超类型),如果缺少一个判断,什么都没有返回,Scala认为任何表达式都会有值,对于空值使用Unit类,
写做()【叫做无有用占位符,相当于Java的void】
3、while语句本身没有值,整个while结果是Unit类型()。do...while(do至少执行一次)
4、for循环的特性被称为for推导式(for comprehension)或for表达式(for expression)
1)像 变量名 <- 集合 被称为生成器表达式,基于集合生成单独的数值。
2)保护式,也叫守卫,可以添加一个或多个守卫,不需要continue语句。
3)使用yield关键字能在for表达式中生成新的集合。for-yield表达式所生成的集合类型将根据被遍历的集合类型推导而出。
4)for推导式不成文约定:单行表达式用(),多行表达式用{}表达式之间必须用分号隔开
5、函数:def 函数名(参数名:类型)[:返回类型] = {函数体}
注意:1)Scala可以通过=右边的表达式推断出函数的返回类型。如果函数体需要多个表达式,可以用代码块{}
2)可以把return当做函数版本的break语句。
3)递归函数一定要指定返回类型。
4)变长参数通过*来指定,所有参数会转化为一个Seq序列
5)_* 高速编译器Range当做参数序列化处理。
6)Head是活的首元素,Tail是获取剩下元素的序列。
6、过程:将不返回值的函数叫做过程,返回类型是Unit,他是没有=号的。
7、懒值:当val被声明为lazy时,他的初始化将被推迟,直到我们首次对此取值
注意:1)用于初始化开销比较大的语句
2)可以解决循环依赖问题。
3)开发懒数据结构的基础。
8、异常:当碰到异常情况时,方法抛出一个异常,种植方法本身的执行,异常传递到其调用者,调用者可以处理异常,也可以升级到它的调用者。运行系统会一直这样升级异常,直到有调用者能处理它,如果一直没有处理则终止整个程序。
1)Scala没有“受检”异常,不需要声明说函数或者方法可能会抛出某种异常。
2)抛出异常:用throw关键字,抛出一个异常对象。所有异常都是Throwable的子类型。throw表达式是有类型的,就是Nothing,因为Nothing是所有类型的子类型,所有throw表达式可以用在需要类型的地方。
3)捕捉异常:用模式匹配思想来做异常的匹配。
注意:throw的类型为Nothing,存在exception的if语句类型返回类型。