----《第一季Kotlin崛起:次世代Android开发 》学习笔记
总目录:每天学一点 Kotlin ---- 目录
上一篇:每天学一点 Kotlin -- 函数:初次见面
下一篇:每天学一点 Kotlin -- 函数:参数
1. 函数的作用范围
1.1 函数根据作用范围可分为:成员函数、本地函数、顶层函数
2. 成员函数
2.1 定义在一个类、object 或者接口内的函数称为成员函数,也称为方法。作用和 Java 中是一样的。
3. 本地函数
3.1 在 Kotlin 中,可以允许把小函数声明在其他函数内部,它们被称为本地函数或嵌套函数。甚至可以多层嵌套。举个栗子:
fun printArea(w: Int, h: Int){
fun area(w: Int, h: Int): Int{
return w * h
}
val result = area(w, h)
println("area = " + result)
}
4.在上面的代码中,函数 area() 就是本地函数。area() 函数在 printAre() 外部就无效了,它只服务于 printArea()。这在实现一个大函数时隐藏实现的细节是非常有用的。使用 Kotlin 中的私有(private)声明也可以实现这样的效果。那么本地函数跟 private 函数有什么好处呢?必须有!那就是可以访问嵌套主函数中的变量。比如,上面的代码可以简化为:
fun printArea(w: Int, h: Int){
fun area() = w * h
val result = area()
println("area = " + result)
}
- 再来看一个使用本地函数的例子:
fun checkNum(start: Int, end: Int) {
for (num in start..end) {
if (num % 3 == 0) {
println("被3整除")
} else if (num % 5 == 0) {
println("被5整除")
} else if (num % 3 == 0 && num % 5 == 0) {
println("能被3和5整除")
} else {
println(num)
}
}
}
checkNum() 函数这是一个普通的检查在一个区间内能被3或5整除的函数,被3整除的代码重复写了两次,这就意味着双倍 bug 的可能性,优化如下:
fun checkNum1(start: Int, end: Int) {
fun isThree(x: Int) = (x % 3 == 0)
fun isFive(x: Int) = (x % 5 == 0)
for (num in start..end) {
if (isThree(num)) {
println("被3整除")
} else if (isFive(num)) {
println("被5整除")
} else if (isThree(num) && isFive(num)) {
println("能被3和5整除")
} else {
println(num)
}
}
}
checkNum1() 中声明了两个本地函数,重构了函数,消除重复。
fun checkNum2(start: Int, end: Int) {
for (k in start..end) {
fun isThree() = (k % 3 == 0)
fun isFive() = (k % 3 == 0)
if (isThree()) {
println("被3整除")
} else if (isFive()) {
println("被5整除")
} else if (isThree() && isFive()) {
println("能被3和5整除")
} else {
println(k)
}
}
}
checkNum2() 中把本地函数放到了更小的范围中,这样的话就消除了 checkNum1() 中传递多次参数的情况
fun checkNum3(start: Int, end: Int) {
for (i in start..end) {
fun isThree() = (i % 3 == 0)
fun isFive() = (i % 5 == 0)
when {
isThree() -> println("被3整除")
isFive() -> println("被5整除")
isThree() && isFive() -> println("能被3和5整除")
else -> println(i)
}
}
}
checkNum3() 中使用了 when,比 checkNum2() 中多个 if-else 的判断语句更加简洁了。以上就是本地函数的好处
4. 顶层函数
4.1 除了成员函数和本地函数外,Kotlin 还支持声明顶层函数。所谓顶层,即这些函数不属于任何源码文件中的小集团(class, 对象,interface),而是直接定义在 Kotlin 文件中的,在 xx.kt 文件中。 ---- 这一点跟 Swift 中是一样的,属于文件而不属于 class 或 interface。
4.2 在定义通用性的工具栏和帮助类类的函数时非常有用。
网友评论