1. 函数的定义
函数是一段封装了特定功能的可重用代码块,用于完成某个具体任务。定义函数时需要指定函数名、参数列表(可选)、返回值类型(可选,部分语言可自动推断)和函数体(实现功能的代码)。
(一)定义函数
格式:
object dfa16 {
def max(x:Int,y:Int):Int = {
if(x>y)
x
else
y
}
(三)函数规则
1.只有一行可以省略{}。当Scala的函数体中只有一行表达式时可以省略{},输出结果依然不变。
2.最后一条语句为函数的返回值。当函数体中有多个语句存在时,返回最后一条语句的值。
3.函数的返回类型可以省略。它会自动推断。
4.函数没有形参,在定义函数时可以省略(),那么在调用函数时也不需要添加()
编码示例:
def getMax(x: Int, y: Int): Int = {
if (x > y)
x
else
y
}
以 Scala 为例,函数定义的基本格式:
def 函数名(参数名1: 参数类型1, 参数名2: 参数类型2, ...): 返回值类型 = {
// 函数体(实现逻辑)
// 最后一行表达式的结果会自动作为返回值(无需显式return,除非需要提前返回)
}
例如:
// 定义一个求三个整数最大值的函数
def max(x: Int, y: Int, z: Int): Int = {
val temp = if (x > y) x else y
if (temp > z) temp else z
}
2. 函数的调用
函数定义后,通过函数名 + 实际参数列表即可调用,执行函数体内的逻辑并获取结果(若有返回值)。
函数名(实际参数1, 实际参数2, ...)
例如:
// 调用上述max函数,传入实际参数100、20、200
val result = max(100, 20, 200)
println(result) // 输出:200
(二)函数调用
[格式]:返回值=函数(参数)
def getSum(x:Int, y:Int): Int = {
x + y
}
val s = getSum(10,20)
printf(s)
注意:
- 实际参数的类型和数量需与函数定义的参数列表匹配(类型不匹配会编译报错)。
- 若函数无参数,调用时可省略括号(如
def hello(): Unit = println("hi")可通过hello或hello()调用)。
3. 函数的返回值
函数执行完成后返回的结果称为返回值,其类型由函数定义时指定(或自动推断)。
特点:
- 返回值类型:在函数定义的
:后指定(如: Int表示返回整数)。若函数无返回值,通常用Unit表示(类似 Java 的void)。
def printHello(): Unit = {
println("Hello") // 无返回值,返回类型为Unit
}
- 返回值的确定:
- 多数函数式语言(如 Scala)中,函数体最后一行表达式的结果会自动作为返回值,无需显式使用
return。 - 若需提前返回(如满足某个条件时退出),可使用
return关键字,此时需显式指定返回值类型。
def abs(n: Int): Int = {
if (n >= 0) return n // 提前返回
-n // 最后一行作为返回值
}
- 返回值的使用:调用函数后,返回值可被赋值给变量、作为其他函数的参数或直接使用。
val a = 5
val b = 3
val sum = a + b // 函数调用的返回值参与运算
println(sum) // 输出:8
[问] 如何改造上面的代码,让函数返回最大值和最小值数据?
println → 改写()
// 定义一个函数,计算三个数中的最大值和最小值
def getMaxAndMin(x: Int, y: Int, z: Int)= {
// 在函数中,返回多个值!
var max = x // 假设最大值为x
if(y > max) max = y
if(z > max) max = z
// println(s"最大值为: $max")
var min = x // 假设最小值为x
if(y < min) min = y
if(z < min) min = z
// println(s"最小值为: $min")
// 同时返回最大,最小值
// 元组
(min,max)
}
练习
(五)元组: 元组表示不同类型值的集合,即元组可以用于存放不同类型的元素,例如可以存放整型、字符串、浮点型、自定义类型等等。Scala的元组类型可以使方法同时返回多个值,省略了中间部分的解析和集合的遍历。
定义 元组:
第一种表示方式为:(元素1,元素2,…元素N)
第二种表示方式为:new TupleN(元素1,元素2,…元素N)。N最大为22 访问元组****
元组通过Tuple_INDEX的方式访问元组中的元素,Tuple表示元组,INDEX表示索引。
t = new Tuple2(1,2); println(t._1, t._2)