控制结构和函数

概要:

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。

 

捕获异常:

 

posted @ 2017-12-07 17:13  凌晨六点半  阅读(214)  评论(0编辑  收藏  举报