一、前言
先展示一下Kotlin创建的一个一行代码的斐波那契数列的函数,至于用到的特性文末给出
fun fibSeries(n:Int) :Int = if (n <= 2) 1 else fibSeries(n-1) + fibSeries(n-2)
斐波那契数列算是最经典的递归函数之一,虽然其他语言可能也可以实现(加大括号的不算,如果这样有些语言的代码几乎都可以折叠成一行,比如c、java等等,但对python那是硬伤)
二、函数的参数
Kotlin中函数的参数定义为:
变量名:类型
例如:
a:Int
s:String
默认参数是常量即val类型的,即不可在函数里面对参数进行修改
1.默认参数
? 当省略某些参数时可以用默认值替代,这一点如果是在kotlin里面调用是没有问题的,但在java里面调用就需要带上注解@JvmOverloads
@JvmOverloads
fun a(x:Int,y:Int = 100){
return x + y
}
fun main(){
print(a(33))
}
2.命名参数
? 显示的指定参数的值,可以配合默认参数使用
@JvmOverloads
fun a(x:Int = 100,y:Int){
return x + y
}
fun main(){
print(a(y = 33))
}
3.可变数量的参数
? 需要添加vararg函数进行修饰
fun myList(vararg items:Int):List<Int>{
val myItems = ArrayList<Int>()
for (item in items){
myItems.add(item)
}
return myItems
}
val list = myList(2,5,6)
fun myList(vararg items:Int,name:String):List<Int>{
....
}
val list = myList(4,5,name = "uii")
三、函数的类型
-
返回Unit的函数 即返回值为空,这个和c语言中的void类似 fun a():Unit{
}
-
返回Nothing的函数 即什么都不返回,一般这个函数执行后下面的代码都不再执行 fun b():Nothing{
}
-
单表达式函数 当函数的函数体只有一行代码时,可以省略花括号,直接采用等号连接代码,这个特性可以结合when,if等语句使用,有时候会产生更加简洁的代码 fun c(n:Int):Int = n*3
-
成员函数 这个没啥特别的和java里面的成员函数一致,即在类中的函数 -
局部函数 即函数里面嵌套一个函数,可以使用外层函数的变量 fun d(){
val a = 6
fun e(){
println(a*4)
}
}
-
尾递归函数 即函数的尾部也是一个函数的调用,可以用tailrec 优化递归调用过程,虽然下面举得这个例子没什么实际作用,体会一下即可 tailrec fun b(n:Int):Int = if (n <= 1) 1 else b(n-1)
-
Top level 函数 顶层函数,这个有点类似java里面的静态成员函数,同一个包下的全部文件都可以直接调用这个函数
fun f(){
println("hello world")
}
-
无参的main函数
fun main(){
}
四、优化代码的过程
1.原始代码
? 这个是最开始的代码,这段代码和其他语言几乎没有区别
fun fibSeries(n:Int):Int{
if(n <= 2){
return 1
}else{
return fibSeries(n-1) + fibSeries(n-2)
}
}
2.利用kotlin if语句的返回值优化
? 这一步应该是kotlin的特色,if语句以最后一行的值作为返回值
fun fibSeries(n:Int):Int{
return if(n <= 2){
1
}else{
fibSeries(n-1) + fibSeries(n-2)
}
}
3.if语句默认执行第一行语句
? 这个应该是许多编程语言所公认的
fun fibSeries(n:Int):Int{
return if(n <= 2) 1 else fibSeries(n-1) + fibSeries(n-2)
}
4.kotlin独特的函数语法糖
? 如果函数只有一行代码那么可以直接用等号进行连接
fun fibSeries(n:Int):Int = if(n <= 2) 1 else fibSeries(n-1) + fibSeries(n-2)
? 是不是爱上Kotlin了,简洁的代码格式使得开发过程更加高效,同时代码极具观赏性(汪汪.jpg)
关注我的技术公众号,每天都有优质技术文章推送。
微信扫一扫下方二维码即可关注:
加入我的技术社区,每天一起学习Kotlin。
点击下方的logo即可加入kotlin开发者社区:
|