概要:
1.条件表达式
2.输入语句很长,实现换行
3.块表达式和赋值
4.输入和输出
5.循环
6.高级for循环和for推导式
7.函数
8.默认参数和带名参数
9.变长参数
10.过程
11.懒值
12.异常
1.条件表达式
BigInt是if与else两个分支的超类:
Any是if与else两个分支的超类:
2.输入语句很长,实现换行
如果想在else之前换行(遇到{则表示后面的肯定还没有结束,因此回车时不会去计算结果)
再看看例子,充分理解{和}的含义,只要输入了{,同时还没有遇到},就说明,输入还没有结束,因此可以实现换行:
3.块表达式和赋值:
块中最后一个表达式的值就是块的值
4.输入和输出
readLine函数从控制台读取一行输入。注:类似方法readDouble、readByte、readShort、readLong、readFloat、readBoolean、readChar。
5.循环
while实现:
for实现:1 to n表示要循环的变量
遍历字符串的index下标:i的最后一个取值是s.length - 1
在以上例子中,事实上我们并不需要使用下标。因此,可以直接遍历对应的字符序列:
6.高级for循环和for推导式
相当于java中的二重循环:
带条件的for循环:注意,if前面并没有分号
如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代成集合中的一个值。
7.函数
定义函数,需要给出函数的名称/参数和函数体,必须给出所有参数的类型,不过,只要函数不是递归的,就不需要指定返回的类型。
如果函数体需要多个表达式完成,可以用代码块。块中的最后一个表达式的值就是函数的返回值。
非递归函数定义:
递归函数定义:
8.默认参数和带名参数
相对参数的数量,如果给出的值不够,默认参数会从后往前逐个应用进来。
带名参数并不需要跟参数列表的顺序完全一致。
9.变长参数
定义一个可以接受可变长长度参数列表的函数:
调用sum方法:注意,如果传入的参数是一个整数区间,那么,应该在这个整数区间后面加上:_*
递归方法可变长参数:args.head表示可变参数的第一个参数,args.tail表示除了第一个参数的其他参数。
10.过程
如果函数体包含在花括号当中但没有前面的=号,那么返回类型就是Unit。这样的函数被称为过程。
11.懒值
在words被定义时即被取值
在words被首次使用时取值
在每一次words被使用时取值
12.异常
throw表达式有特殊的类型Nothing。如果一个分支的类型是Nothing, 那么if/else表达式的类型即使另外一个分支的类型。即下面的if/else的类型是Double。
捕获异常: