小记--------scala的函数定义及使用

1.定义函数:需要定义函数的函数名、参数、函数体
   函数语法def 函数名(参数名:参数类型 , 参数名:参数类型) = {函数体}
 
scala要求必须给出所有参数的类型,但是不一定给出函数返回值的类型,只要右侧的函数体中不包含递归的语句,scala就可以自己根据右侧的表达式推断出返回类型。
 
 
2.单行的函数:
如果函数体中有多行代码,则可以使用代码块的方式包裹多行代码,代码块中最后一行的返回值就是整个函数的返回值,与java不同,不需要使用return返回值。
代码块 : 也就是通过{} 括起来。
 
例: 定义一个函数累加值
 
3.递归函数:必须有函数的返回值类型
    例:经典的斐波那契数列  时间复杂度不够好
 
 
4.函数的默认参数
    在scala中,有时我们调用某些函数时,不希望给出参数的具体值,而希望使用参数自身默认的值,此时就定义在定义函数时使用默认参数
默认参数就是在设置参数的时候直接 = 一个默认值。即可
 
5.带名参数
    在调用函数时,也可以不按照函数定义的参数顺序来传递参数,而是使用带名参数的方式来传递
 
 
6.函数入门之变长参数
    在scala中,有时我们需要将函数定义为参数个数可变的形式,则此时可以使用变长参数定义函数。
    也就是 在参数类型后面添加符号 * 即可。
 
7.通过序列调用可变参数
 
 
8.函数之入门之过程、lazy值和异常
 
8.1过程
    在scala中,定义函数时,如果函数体直接包裹在了花括号里面,而没有使用=连接,则函数的返回值类型就是Unit, 这样的函数就被称之为过程,过程通常用于不需要返回值的函数。说白了就是正常的函数如果没有返回值那么就称这个函数为过程。 
    过程还有一种写法,就是将函数的返回值类型定义为Unit
 
不是过程的函数
 
是过程的函数
 
8.2 lazy值
    在scala中,提供了lazy值的特性, 也就是说,如果将一个变量声明为lazy,则只有在第一次使用该变量时,变量对应的表达式才会发生计算,这种特性对特别耗时的计算操作特别有用, 打开文件进行IO,进行网络IO等
 
    案例:
在进行IO的时候需要先导入IO的包
    import scala.io.Source._
然后定义lazy常量读文件, 当时lazy的时候, 如果文件不存在,也不会报错, 因为只有在使用变量时才会报错。
 
 
8.3异常    
    在scala中,异常处理和捕获机制与java是非常相似的。
跟java大致一样,只是在catch处, 
java的语法是 catch(IllegalArgumenExecption e){print("sorry")}  
而scala语法是 catch{case e; IllegalArgumenExecption => print("sorry")}
 
finally还是不论如何都会执行此处。
 
posted @ 2020-04-11 18:58  二黑诶  阅读(780)  评论(0编辑  收藏  举报