yuxuanchiadm
本帖最后由 yuxuanchiadm 于 2019-7-19 13:08 编辑

【索引贴】https://www.mcbbs.net/thread-887515-1-1.html

布尔值

布尔值Boolean类型是有2个值得的类型,分别为false和true,是编程中最常用的数据类型Datatype之一,很多其他的数据类型都存在返回布尔值的函数,例如对于数值类型,你可以调用其比较大小的函数,并返回一个布尔值:
  1. val b: Boolean = 1 >= 2
复制代码
注意这里的“>=”标识符其实代指的是一个函数。只不过因为其定义在Int类型中,而且除了一个Int类型自身的值“this”以外只有一个参数,所以可以使用中缀方式,省略括号来调用。在后面的章节中将介绍如何在数据类型中定义函数。

条件以及循环

条件表达式Conditional Expression根据一个布尔值,来从2个表达式中选择一个表达式的值作为其值,如果没有else分支,则条件为“false”是默认为Unit值“()”:
  1. val s: String = if (b) "foo" else "bar"
复制代码
循环表达式Loop Expression分为2种,While循环表达式While Loop ExpressionDo循环表达式Do Loop Expression。这两种表达式的值均为Unit类型的值“()”,且都是对一个类型为布尔值的表达式,称之为循环条件Loop Condition,以及一个Unit类型的表达式,称之为循环体Loop Body进行多次求值,直到其循环条件表达式的值为“false”为止。区别在于While循环表达式的循环体可以一次都不执行,而Do循环表达式的循环体至少执行一次:
  1. var i: Int = 0
  2. while (i < 10) i += 1
  3. do i /= 2 while (i % 2 != 0)
复制代码

Range以及列表解析

Range类型是一种Int类型的特殊集合类型,用于构造一个Int的区间,例如:
  1. 0 to 10
  2. 0 until 10
  3. 0 to 10 by 2
  4. 0 until 10 by 2
复制代码
其中使用to的称之为Inclusive Range,而使用until的称之为Exclusive Range,区别在于构造的区间是否包含上界,by用于指定其单次迭代的步数。例如对于“0 until 10 by 2”,会构造包含“0 2 4 6 8”的Range。
列表解析For Comprehension表达式是Scala中复杂,但是重要的表达式。列表解析会使用4个跟所解析的数据类型相关的4个函数来实现其功能:map、flatMap、withFilter以及foreach。列表解析不光能用于Range,任何实现或部分实现了这4个函数的数据类型都可以进行列表解析,所以列表解析实际上是一种语法糖,编译器会把列表解析表达式翻译成对这些函数的调用。
列表解析大体上分为两种用法,第一种用法是当作For循环For Loop来使用,此时整个表达式的值,一般来说(一般来说不会出现反例,除非有人在搞事)为Unit值“()”。其语法入下例所示:
  1. for (i <- 0 to 10) println(i)
  2. for {
  3.   i <- 0 to 10
  4.   j <- 0 to 1
  5.   t = (i, j)
  6. } println(t)
  7. for {
  8.   i <- 0 to 10
  9.   if i % 2 != 0
  10. } println(i)
复制代码
另一种用法是对数据类型进行变换,计算出新的数据类型。此时整个表达式的值,一般来说(也就是说会有反例)为yield关键字后面的值的类型的集合。至于具体的集合是什么类型,一般来说(也就是说会有反例)跟你变换前的集合的类型是同一个类型。其语法如下例所示:
  1. for (i <- 0 to 10) yield i
  2. for {
  3.   i <- 0 to 10
  4.   j <- 0 to 1
  5.   t = (i, j)
  6. } yield t
  7. for {
  8.   i <- 0 to 10
  9.   if i % 2 != 0
  10. } yield i
复制代码
当然列表解析是可以嵌套的:
  1. for {
  2.   i <- for (i <- 0 to 10) yield i
  3.   if i % 2 != 0
  4. } println(i)
复制代码
顺带一提,列表解析也是某个"M" word thing的语法糖,其具体的用法将在第四章进行解释。

通天塔44
谢谢分享,学习了,,,

WW915496235
好复杂