5-1-定义和调用函数

定义和调用函数

Kotlin是强类型编程语言,因此使用函数前需定义

fun 函数名(形参列表)[:返回值类型]{
//需要重用的代码块
}

返回值类型一定要与 return 的类型匹配,如果一个函数没有返回值,则返回Unit,返回值声明部分可以省略 多个形参之间使用','隔开,并且必须指定类型

Kotlin声明函数需要使用fun关键字。

函数名

  • 从语法角度看,函数名只需是合法的标识符;

  • 从可读性角度看,函数名应由一个或多个有意义的单词组成,采用小驼峰命名法:

    • 第一个单词首字母小写;

    • 后续单词首字母大写;

    • 其余字母小写;

    • 单词之间不使用分隔符。

返回值类型

在 Kotlin 中,函数的返回值类型可以是 任意合法的数据类型。

  • 如果在函数声明中指定了返回值类型,那么函数体中必须包含一条有效的 return 语句,并且 return 返回的变量或表达式的类型必须与声明的返回值类型一致。

  • 如果函数不需要返回值,有两种写法:

    1. 省略返回值类型(默认返回 Unit)。

    2. 显式声明返回 Unit,其中 Unit 表示“无返回值”。

形参列表

形参列表用于定义函数能够接收的参数。它由零个或多个“形参名: 参数类型”组成,多个参数之间用英文逗号分隔,形参名与参数类型之间用英文冒号分隔。
一旦在函数定义中指定了形参列表,那么调用该函数时就必须传入对应的实参值 —— 谁调用函数,谁负责为形参提供数值。

函数体内多条可执行语句之间有严格的执行顺序,排在函数体前面的代码先执行。

示例

// 定义一个函数,计算矩形的面积
fun calculateArea(length: Int, width: Int): Int {
// 这里必须有 return,且返回 Int 类型
return length * width
}

// 定义一个函数,打印欢迎信息(无返回值,省略返回值类型)
fun printWelcomeMessage(name: String) {
println("欢迎你,$name!")
}

// 定义一个函数,显式声明返回 Unit
fun logInfo(message: String): Unit {
println("[INFO] $message")
}

fun main() {
// 调用有返回值的函数
val area = calculateArea(10, 5)
println("矩形面积是: $area")

// 调用无返回值的函数
printWelcomeMessage("小明")
logInfo("程序运行正常")
}

单表达式

如果函数体只有一个表达式,此时{}可以省略并在=后指定函数体 因为可以类型推断因此返回值的定义可以省略

// 普通写法
fun square(x: Int): Int {
return x * x
}

// 单表达式写法
fun square(x: Int) = x * x

// 类型推断:返回值类型省略
fun greet(name: String) = "Hello, $name!"

fun main() {
println(square(5)) // 输出 25
println(greet("Kotlin")) // 输出 Hello, Kotlin!
}

函数形参

Kotlin 函数的参数名不是无意义的, 允许调用函数时通过名字来传入参数值。

fun greet(name: String, age: Int, city: String) {
println("大家好,我是 $name,今年 $age 岁,来自 $city。")
}

fun main() {
// 位置参数调用(必须按定义顺序传入)
greet("小明", 20, "北京")

// 命名参数调用(可打乱顺序,提升可读性)
greet(age = 22, city = "上海", name = "小红")

// 部分使用命名参数
greet("小刚", city = "广州", age = 25)
}

##形参默认值 在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值一一这样调用函数时 就可以省略该形参,而直接使用该形参的默认值。

// 定义函数时为参数指定默认值
fun greet(name: String = "陌生人", message: String = "你好") {
println("$message,$name!")
}

fun main() {
greet() // 使用所有默认值 -> 输出: 你好,陌生人!
greet("小明") // 只传入 name -> 输出: 你好,小明!
greet(message = "欢迎") // 只传入 message -> 输出: 欢迎,陌生人!
greet("小红", "早上好") // 覆盖所有参数 -> 输出: 早上好,小红!
}

可变长度的形参

Kotlin允许为函数指定数量不确定的形参,需要在形参前加 vararg 修饰,多个形参值被当成数组传入

举个例子

// 定义一个函数,接收任意数量的整数,并计算它们的和
fun sumAll(vararg numbers: Int): Int {
var sum = 0
for (num in numbers) {
sum += num
}
return sum
}

fun main() {
val result1 = sumAll(1, 2, 3) // 1 + 2 + 3 = 6
val result2 = sumAll(10, 20, 30, 40) // 10 + 20 + 30 + 40 = 100

println(result1) // 输出: 6
println(result2) // 输出: 100
}

代码解释

  • 使用 vararg numbers: Int 表示 numbers 可以接受任意数量的 Int 参数。

  • 在函数内部,numbers 实际上是一个 IntArray。

  • 调用函数时,可以传入 0 个或多个参数,也可以直接传入一个数组并用 * 展开: