何为函数?
为了完成某一个功能的程序语句的集合,称之为函数。函数可以在任何位置,甚至可以在函数中定义函数。
何为方法?
在类中的函数称之为方法。
Scala定义函数:
两种方式:
1、用def定义
def add(): Int ={
return x*y*z
}
2、用val定义
val f = (x:Int) => x+3
Scala函数的特点:
(1)函数不可以重载或重写。
(2)Scala可以在任意的语法结构中声明任何语法。
(3)Scala中的函数可以嵌套定义。
Scala函数参数:
(1)可变参数
def f1(str:String*) : Unit = {
println(str)
}
在参数后加上“*”,则表示参数的长度不固定。
r1.f1("bob","tom","jerry")
r1.f1("abc")
运行结果:
ArraySeq(bob, tom, jerry)
ArraySeq(abc)
(2)参数默认值
def f2(name : String = "NAME",age : Int): Unit ={
println(s"我的名字是${name},我今年${age}")
}
(3)带名参数
r1.f2(age = 23)
结果为:
我的名字是NAME,我今年23
函数至简原则
(1)return 可以省略,Scala 会使用函数体的最后一行代码作为返回值;
(2)如果函数体只有一行代码,可以省略花括号;
(3)返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略);
(4)如果有 return,则不能省略返回值类型,必须指定;
(5)如果函数明确声明 unit,那么即使函数体中使用 return 关键字也不起作用;
(6)Scala 如果期望是无返回值类型,可以省略等号;
(7)如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加;
(8)如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略;
(9)如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略;
匿名函数
匿名函数即没有函数名的函数。
(x:Int) => {函数体}
匿名函数的作用:
(1)可以当作参数输入:
val fun = (name : String) => {println(name)}
fun("123")
def f(func:String => Unit): Unit ={
func("A_Q")
}
f(fun)
f((name:String) => {println(name)})
这样做的好处是在数据不变的基础上,可以调用不同的方法来对数据进行处理。
匿名函数的简化原则:
(1)参数的类型可以省略,会根据形参进行自动的推导
(2)类型省略之后,发现只有一个参数,则圆括号可以省略;其他情况:没有参数和参数超过 1 的永远不能省略圆括号。
(3)匿名函数如果只有一行,则大括号也可以省略
(4)如果参数只出现一次,则参数省略且后面参数可以用_代替
f(println(_))
(5)如果知道当前传入的是一个函数体而不是引用,则_可以省略
f(println)