函数规则
返回值:
-
指定返回值类型(Int,Double...)
-
函数的返回类型可以省略。它会自动推断。返回值类型要指定
-
Unit 表示这个函数没有返回值
-
函数内,最后一个表达式(最后一句代码)就是函数的返回值,当函数体中有多个语句存在时,返回最后一条语句的值。
当Scala的函数体中只有一行表达式时可以省略{},输出结果依然不变。
案例1:找到x,y中的较大值
object basic32 {
//定义函数
def max(x:Int,y:Int)={
if(x > y)
x
else
y
}
def main(args: Array[String]): Unit = {
var rst = max(2,3) //调用函数
println(s"2和3的较大值是:${rst}")
}
}
案例2:找到x,y,z中的最大值
object basic33 {
// (1)三选一
def max1(x:Int,y:Int,z:Int):Int = {
if(x >= y && x >= z)
x
else if(y >= x && y >= z)
y
else
z
}
// (2)两个选一个较大值;较大值和剩下的那个中选择一个
def max2(x:Int,y:Int,z:Int):Int = {
if(x >= y && x >= z)
x
else if(y >= x && y >= z)
y
else
z
}
def main(args: Array[String]): Unit = {
var rst = max1(2,30,100) //调用函数
println(s"2,100,100的最大值是:${rst}")
}
}
函数返回多个数据
案例3:找到x,y,z中的最大值 和 最小值
object basic34 {
def max(x:Int,y:Int,z:Int):(Int,Int)={ //(Int,Int) 是返回值类型,表示这个函数的返回值中一两个整数
var maxValue = if(x > y) x else y //x,y的较大者
maxValue = if(maxValue > z ) maxValue else z
var minValue = if(x < y) x else y
minValue = if(minValue < z) minValue else z
//返回一个容器,包含两个值
(minValue,maxValue)
}
def main(args: Array[String]): Unit = {
var rst = max(2,30,100) //调用函数
println(s"最小值是:${rst._1}, 最大值是:${rst._2}") // 访问元组的数据 ._数字编号
}
}
参数默认值
如果在调用时没有传入,就使用这个默认值
格式:def 函数名(参数1:类型1=默认值1,参数2:类型2=默认值2)
案例4:定义一个函数,并使用不同的参数来测试
object basic36 {
def greet(name:String="小h",age:Int=19,gender:String="女"):Unit = {
println(s"你好,我是${name},我今年${age}岁,我的性别是:${gender}")
}
def main(args: Array[String]): Unit = {
greet("小z",18,"女") //提供所有参数
greet("小z",18)
greet("小z")
greet() //使用默认值
//设置年龄为20,其他两个参数使用默认值
greet(age=20)
greet(gender="男",age=20)
}
}
没有参数
如果没有参数,在定义函数时,可以省略(),在调用函数时就不能添加()
//没有参数,可以省略()
def say:Unit = {
println("hello world!")
}
def main(args: Array[String]): Unit = {
say //调用函数
}
可变参数
格式:参数类型*
要点:1.类型要一致 2.可变参数必须要在列表的最后
案例1:如何定义一个函数,它能接收数量不定的参数,并计算它们的累加?
例如:getSum(1,2,3)得到6,getSum(1,2,3,4)得到10
object basic38 {
def getSum(args:Int*):Int = {
var sum = 0
for(i <- args){
sum +=i
}
sum
}
def main(args: Array[String]): Unit = {
val rst1 = getSum(1,2,3) //6
val rst2 = getSum(1,2,3,4) //10
val rst3 = getSum(1,2) //3
println(rst1,rst2,rst3)
}
}