Scala函数
1. 定义函数
格式:定义 函数名(参数列表):返回值 = {函数体}
def func(x:Int, y:Int, ...) : 返回值 = {
...
xxxx // 最后一行默认为返回值
}
标准函数:有入参、出参、有返回值
def add(x:Int, y:Int):Int = {
x + y
}
当返回值类型确定,返回值类型可以自动推导出来时,返回值类型可以省略
def add1(x:Int,y:Int) = {
x + y
}
注意:如果是递归方法,必须要写返回值类型,因为递归方法必须要有一个出口。
没有入参、没有出参,也没有返回值(返回值类型是Unit)的函数
def sayHello(): Unit = {
println("say hello")
}
sayHello()
sayHello // 当调用的函数没有入参时,可以省略()。(带有默认参数的函数除外)
2. 调用函数
格式:函数名(参数列表)
注意:当调用的函数没有入参时,可以省略()。(带有默认参数的函数除外)参照上面的例子。
3. 函数的特殊参数类型
默认参数:入参有默认值的函数,不传则使用默认参数,传参则使用传进去的值
def loadSparkConf(fileName:String = "spark-default.conf"): Unit = {
println(fileName)
}
loadSparkConf()
loadSparkConf("Spark.conf")
可变参数:参数个数不确定时,方便扩展(特殊示例:把Range类型转换成可变参数)
def sum(nums:Int*) = {
var res = 0
for (num <- nums) {
res += num
}
res
}
println(sum(2,4,6))
// 1.to(10)是一个range类型,我们计算要传参类型为Int。下面的方法可以将Range转换成可变参数,:_*是固定写法
println(sum(1.to(10) :_*))
// 另外一个示例
def printFruits(fruits:String*): Unit = {
for (fruit <- fruits) {
println(fruit)
}
}
printFruits("apple","orange","banana")
printFruits(Array("apple","orange","banana"):_*) // 把Array转成可变参数传进去
命名参数:(比较少用,了解即可)
def teacher(spark:String, scala:String): Unit = {
println(spark)
println(scala)
}
teacher("Ruoze", "Jepson") // 不想写参数名时按照顺序写即可
teacher(scala="Ruoze",spark="Jepson") // 可以根据名称传进去(这种用法比较少)