美文网首页
用 Kotlin 写 Android 5—函数

用 Kotlin 写 Android 5—函数

作者: jkwen | 来源:发表于2021-04-24 22:10 被阅读0次
    相比 Java 里的方法,Kotlin 里叫函数,并且在实现写法上也有较大不同, 一个简单的 Kotlin 函数.png

    一个简单函数的实现就如图片展示(抱歉,图片中写成了方法,其实应该叫函数)。「fun」修饰符是关键,返回类型要根据实际情况,如不需要返回值就不用写,而不像 Java 要用 void。

    函数入参

    普通参数声明和变量声明类似。而如果想要给入参赋上默认值,就可以直接在参数后面赋值,这样做有什么好处呢?当参数比较多,而大部分入参值不需要改变时,就可以不传值,这样函数就会用默认值,

    //带上默认值,这样一来可以 functionName() 这样调用该函数,但如果是 Java 代码调用这个函数,依然每个参数都要传值(亲测)
    //如果要像 Kotlin 一样来用,就用 @JvmOverloads 注解,实际上会生成多个重载方法-
    fun functionName(name: String = "", sex: Int = 1): String {
        return ""
    }
    

    另外还有可变参数,Kotlin 用 vararg 取代了 Java 里的 ... 写法,只要用 vararg 修饰的参数就是可变参数。

    当生成某一集合的数据来自别的集合,需要进行展开操作,在子集合上使用展开运算符 * 可对集合进行展开。

    特殊函数

    • 顶层函数
      对等于 Java 的静态方法,可以用来实现工具类,同理对一些想全局访问的常量,也可以用顶层属性来表示。

    • 扩展函数
      其实就是特殊的顶层函数,特殊点在于需要在函数名前面加上类的引用。通常情况下都是对系统类或者三方库类进行功能扩展,但不同于类自身的函数,扩展函数只能访问类的公有属性,且不能被子类继承重写。

      假如父类,子类有相同的扩展函数,最终调用谁的扩展函数是由对象的静态类型决定,

    //左边的 Parent 就是静态类型,右边的 Child 就是动态类型
    Parent obj = new Child();
    

    还有,如果类的成员函数和扩展函数名称相同,成员函数会比扩展函数优先调用。

    同顶层属性一样,也有扩展属性的概念,但我看了下感觉实用价值不大,先不管了。

    • 泛型函数
      泛型函数还是比较实用的,所以我觉得知道怎么写更实用些。在函数名前面 <T> 表示泛型函数,在入参上就可以用 T 类型声明变量了。

    另外一些就是我觉得实际不太可能会用到的函数类型,比如尾递归函数,高阶函数,做个了解就行。

    其他操作

    • 中缀调用
      适用于函数入参仅一个的函数,其实就是简化了写法,如果要用中缀调用就要用 infix 修饰,例如
    infix fun add(num: Int): Int {
        return this + num
    }
    //在方法调用时,可以像这样 1 add 3,来代替 1.add(3)
    //这其实就是语法糖的效果吧
    
    • 解构声明
      我理解的就是同时赋值多个变量

    相关文章

      网友评论

          本文标题:用 Kotlin 写 Android 5—函数

          本文链接:https://www.haomeiwen.com/subject/nooolltx.html