本文主要是介绍快学Scala第2章--控制结构和函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
快学Scala第2章–控制结构和函数
本章要点
- if表达式有值。
- 块也有值—-是它最后一个表达式的值。
- Scala的for循环就像是增强版的Java for循环
- 分号(在绝大多数情况下)不是必须的
- void类型是Unit
- 避免在函数定义中使用return
- 注意别在函数式定义中漏掉了=
- 异常的工作方式和Java或C++中基本一样,不同的是你在catch语句中使用“模式匹配”
- Scala没有受检异常
条件表达式
在Scala中,if/else 表达式是有值的,这个就是跟在if或者else之后的表达式的值。例如:
val s = if(x > 0) 1 else -1
// 类似于
var s = 0
if(x > 0) s = 1 else s = -1
第一种写法可以直接用来初始化一个val,而第二种写法只能用于改变var变量的值。 if/else 的返回值的作用可以模拟C++和Java中三目运算符: ?: 如: x > 0 ? 1 : -1 等同于Scala的 if(x > 0) 1 else -1 ; 但是在 ?: 运算符的表达式中不能插入其他语句。
上面的Scala 的if/else 的返回值的类型都是相同的–Int类型, 但是Scala允许使用混合类型的返回值,例如:
if(x > 0) "positive" else -1
上式表达式返回的类型是它们类型的公共超类型, 在这里java.lang.String 和 Int 它们的公共超类型是Any 。 如果else部分缺失了,例如:
if(x > 0) 1
// 这就等同于
if(x > 0) 1 else ()
这相当于引入了一个Unit类,写做()。你可以把()当做是表示”无有用值”的占位符, 将 Unit 当做是C++或Java的 void。(但是从技术上讲,void没有值,但是Unit是有值的,它表示一个”无值”的值)。
另外,Scala没有switch语句,不过它有强大的模式匹配机制。
小提示:如果想要在REPL中粘贴成块的代码,可以使用粘贴模式,键入 :paste , 把代码块粘贴进去, 然后按下Ctrl + D
语句终止
在C++和Java中, 每个语句都是以分号结尾的,否则不会编译通过,而在Scala中,行尾的位置不需要分号; 但是在单行中写下多个语句的话,就需要将它们用分号隔开。例如:
if(n > 0) { r = r * n; n -= 1}
如果你在写较长的语句需要分两行来写的话,就要确保第一行以一个不能作为结尾的符号结尾, 例如:
s = s0 + (v - v0) * t + // +告诉解析器这里不是语句的结尾0.5 * (a - a0) * t * t
块表达式和赋值
在Scala中,{}块包含一系列表达式,其结果也是一个表达式,即块中最后一个表达式的值就是块的值。这样可以直接用块的
这篇关于快学Scala第2章--控制结构和函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!