IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> what?函数的创建只要一行代码(Kotlin中的函数) -> 正文阅读

[移动开发]what?函数的创建只要一行代码(Kotlin中的函数)

一、前言

先展示一下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))
    //最后输出133
}

2.命名参数

? 显示的指定参数的值,可以配合默认参数使用

//默认参数当然还是可以写在前面的,但调用的方式不同
//这就是命名参数
@JvmOverloads
fun a(x:Int = 100,y:Int){
    return x + y
}
fun main(){
    print(a(y = 33))
    //同样输出133
    //这里的y一定要和函数里面的函数相匹配
}

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里面的静态成员函数,同一个包下的全部文件都可以直接调用这个函数

    //直接在一个kt文件下编写
    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开发者社区:

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:50:25  更:2021-12-11 15:50:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:29:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码