零、本讲学习目标
掌握如何声明函数
了解各种类型的函数
掌握占位符的使用
理解闭包的现象
掌握可变参数
理解尾递归
一、声明函数
函数其实是一段具有特定功能的代码的集合,由函数修饰符、函数名、函数参数列表、函数返回值声明与函数体组成。
(一)显式声明函数
1、声明格式
[public | private | protected] def 函数名(参数列表) : 返回值声明 = {函数体}
2、注意事项
函数通过def关键字定义
def前面可以具有修饰符,可以通过private、protected来控制其访问权限。注意默认访问权限是public
还可使用override、final等关键字修饰
函数体中return关键字往往可以省略掉,一旦省略掉,函数将会返回整个函数体中最后一行表达式的值,这也要求整个函数体的最后一行必须是正确类型的值的表达式
scala一般都可以自动推断出返回值类型,所以通常返回值类型声明可以省略,但是注意,如果因为省略了返回值类型造成歧义,则一定要写上返回值声明
如果函数体只有一行内容,则包裹函数体的大括号可以省略
如果返回值类型是Unit,则另一种写法是可以去掉返回值类型和等号,把方法体写在花括号内,而这时方法内无论返回什么,返回值都是Unit
3、案例演示
(1)加法函数
创建net.hw.func包,在包里创建Example01对象
package net.hw.func
import scala.io.StdIn
/**
- 功能:显式声明函数
- 作者:华卫
- 日期:2022年03月06日
*/
object Example01 {
def add1(a: Int, b: Int): Int = {
return a + b
}
def add2(a: Int, b: Int): Int = {
a + b
}
def add3(a: Int, b: Int) = {
a + b
}
def add4(a: Int, b: Int) = a + b
def add5(a: Int, b: Int) {
println(a + " + " + b + " = " + (a + b))
}
def main(args: Array[String]): Unit = {
print("a = ")
val a = StdIn.readLine().toInt
print("b = ")
val b = StdIn.readLine().toInt
println(a + " + " + b + " = " + add1(a, b))
println(a + " + " + b + " = " + add2(a, b))
println(a + " + " + b + " = " + add3(a, b))
println(a + " + " + b + " = " + add4(a, b))
add5(a, b)
}
}
运行程序,查看结果
(2)阶乘函数
显式声明阶乘函数并调用
(二)隐式声明函数
1、声明格式
(参数列表) => {函数体}
2、注意事项
如果函数体只有一行,那么大括号可以省略
如果参数类型可以推测得知,那么参数列表中类型声明可以省略
如果函数参数列表中只有一个参数,在不会产生歧义的情况下,小括号可以省略
3、案例演示
(1)加法函数
在net.hw.func包里创建Example02对象
package net.hw.func
import scala.io.StdIn
/**
- 功能:隐式声明函数
- 作者:华卫
- 日期:2022年03月06日
*/
object Example02 {
val add1 = (a: Int, b: Int) => {a + b}
val add2 = (a: Int, b: Int) => a + b
val add3 = (n: Int) => n + 1
def main(args: Array[String]): Unit = {
print("a = ")
val a = StdIn.readLine().toInt
print("b = ")
val b = StdIn.readLine().toInt
println(a + " + " + b + " = " + add1(a, b))
println(a + " + " + b + " = " + add2(a, b))
println(a + " + " + 1 + " = " + add3(a))
}
}
val add1 = (a: Int,<