函数参数

121 阅读1分钟

一. 函数参数的默认值

定义:

函数参数的默认值,是在定义函数时为特定参数预先设定的固定值,调用该函数时若未主动给这个参数传递数据,函数就会自动使用这个预设值来执行操作。

简单来说,它就像给函数参数 “留了个备用值”,避免了因参数缺失导致的调用错误。

格式:

def 函数名(参数1:类型1=默认值1,参数2:类型2=默认值2)

示例:

代码:

object base1201 {
  // gender:
  def greet(name:String="哈哈", age:Int=18, gender:String="女"):Unit = {
    println(s"我是${name}, 我今年${age}, ${gender}")
  }

  def main(args: Array[String]): Unit = {
    greet("小花", 18) // 默认值
    greet("小明", 20, "男")
    greet()

    // 设置age为20,其他采用默认值
    // 传参数的时候,指定参数的名字
    greet(age = 20)
    greet(gender = "男", age = 20)
  }
}

代码分析:

  • 定义了 greet 函数,有三个参数 name(默认值为 “哈哈”)、age(默认值为 18)、gender(默认值为 “女”),函数功能是打印出包含姓名、年龄、性别的信息。

  • 在 main 方法中,进行了多次 greet 函数调用:

    • greet("小花", 18):使用传入的 “小花” 作为 name,18 作为 agegender 用默认值 “女”。
    • greet("小明", 20, "男"):三个参数都使用传入的值。
    • greet():三个参数都使用默认值。
    • greet(age = 20)age 使用传入的 20,name 用默认值 “哈哈”,gender 用默认值 “女”。
    • greet(gender = "男", age = 20)gender 使用 “男”,age 使用 20,name 用默认值 “哈哈”。

二. 创建不带()的方法

格式:

def 方法名:[返回类型]={}

示例:

代码:

object base1202 {
  // 如果函数不需要参数,可以定义函数的时候,省略()
  def greet():Unit = {
    println(s"hahhaa~~~")
  }

  def main(args: Array[String]): Unit = {
    // 如果定义函数的时候没有写(),那么在调用函数的时候,也不要加()
    greet
  }
}

注意: 定义函数指println(s"hahhaa~~~")这部分内容

  • 当定义函数时如果没有写括号 ()(即无参函数),例如 def greet: Unit = println("hello"),那么调用时也不能加括号,必须写成 greet
  • 反之,如果定义时带了括号(即使为空括号),例如 def greet(): Unit = println("hello"),调用时可以加括号 greet() 或不加 greet

三. 创建接受变参的方法

定义:

允许传入不同个数,但是类型相同的参数

变参特点:

函数中的参数的个数是不确定的。

写法:

参数类型后面加*,而参数类型*,这种方式只能接受同一类型的参数。

示例:

传入不同的数量的参数 第一个参数是学生的名字,从第二个参数开始,是这个学生的某个学科的得分 array 数组

object base1203 {
  def greet(name:String, score:Int*):Unit = {
    // score 是一个列表
    var total:Double = 0
    for(i <- score){
      total += i
    }

    val avg = total / score.length
    println(s"${name}, 平均分是:${avg}")
  }

  def main(args: Array[String]): Unit = {
    //
    greet("小花", 90, 100, 98, 100, 60)
    greet("小明", 80, 88)
    greet("小张", 90)
  }
}

// 小花, 平均分是:89.6
// 小明, 平均分是:84.0
// 小张, 平均分是:90.0