第2章 控制结构和函数
if/else
Scala的if/else语法结构和Java或C++一样,不过在Scala中if/else表达式有值,这个值就是跟在if/else之后的表达式的值。看一些例子:
if(x>0) 1 else -1 // 两个分支都是Int
val s = if(x>0) 1 else -1 //两个分支都是Int
在Scala中,每个表达式都有一个类型,上面两个例子中都是Int.但也有混合类型表达式。
if(x>0) "positive" else -1 //
第一个分支为String,第二个为Int。此为混合类型,它们的公共超类叫做Any。
if(x>0) 1 //缺失了else部分,但是在Scala中的if/else中每个表达式都得有值,此时引入Unit类,写作()
if(x>0) 1 else ()//
你可以把()当做表示“无有用值”的占位符,将Unit当做Java中的void,但是二者还是有区别的。
输入输出
如果要打印一个值,我们用print或者println函数,后者多一个换行符,另外还有一个带C风格格式化字符串的printf函数。
你可以用readLine函数从控制台读取一行输入,当然要读书数字,Boolean或者字符可以用readInt,readDouble。。。。readBoolean,readChar。
-
注意:没有readString()函数。readLine()可以加提示参数,如下例子:
val name = readLine("your name:") //可以带参 print("your age:") val age = readInt() //读取数字
循环
Scala拥有和Java和C++一样的while和do循环,而Scala中的for()循环语句结构特殊,如下:
for(i<- 1 to n)//循环:1到n之间的数字包含n
for(i<- 表达式) //for循环的语法架构,让变量i变量右边的所有表达式的值
-
在变量字符串或数组的时候,经常需要用到0道n-1的区间,这个时候可以用until方法而不是to方法,until方法不包括上限值,如下:
val s = "Hello" var sum = 0 for(i <- 0 until s.length) sum+= s(i) //以上代码使用了until,可以简化如下 var sum=0 for(ch <- "Hello") sum+=ch
函数
Scala除了方法外还支持函数。方法对对象操作,而函数不是。C++中也有函数,不过Java中我们只能用静态方法来模拟。
-
scala之method和function的区别
//定义一个函数
def fac(n:Int) = {var r = 1 for(i < 1 to n) r = r*i r } //本例中并没有用到return。我们也可以像Java或c++一样使用return从某个函数退出,不过在Scala不常用
变长参数:
def sum(args:Int*) = {
var result = 0
for(arg <- args) result += arg
result
}
懒值
当val被声明为lazy时候,它的初始化将被推迟,直到我们首次去用它。懒值的好处,对于开销较大的初始化语句十分有益,节省了不必要的开销。