scala函数的基本使用

90 阅读2分钟

函数规则

返回值:

  1. 指定返回值类型(Int,Double...)

  2. 函数的返回类型可以省略。它会自动推断。返回值类型要指定

  3. Unit 表示这个函数没有返回值

  4. 函数内,最后一个表达式(最后一句代码)就是函数的返回值,当函数体中有多个语句存在时,返回最后一条语句的值。


当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)

  }
}