Kotlin学习笔记之 18 函数

271 阅读1分钟

首发于公众号: DSGtalk1989

18.函数

  • 默认参数

    override复写的方法不允许出现默认参数。

  • vararg

    vararg关键字表示传入的是数组,如下的方法传入的是String字符串数组

    fun foo(vararg strings: String) { }
    

    如果我们需要通过指定的方式传入的话需要注意以下问题

    fun main() {
          foo(strings = *arrayOf("a", "b", "c"))
    }
    

    strings指向的是String类型,如果不加上*,会报错。

    以此类推,我们有时候也可以直接在数组初始化中传入数组

    val a = arrayOf(1, 2, 3)
    val list = asList(-1, 0, *a, 4)
    
  • 中缀表示法

    我们在kotlin中可以使用一些自己命名的方法很好的处理一些事情。比如说系统为我们定了了操作符>来判断左边的是否大于右边的。我们也可以自己实现

      infix fun Int.大于(b : Int) : Boolean{
          return this > b
      }
    

    中缀关键字infix用来修饰的函数只有两种,一种是上面的这种扩展函数,一种是成员函数。

    中缀函数的使用方式跟操作符是一样的,直接a 中缀函数名 bab都不可少,需要接受者和参数。举个成员函数的例子:

    class MyStringCollection {
          infix fun add(s: String) { …… }
          
          fun build() {
              this add "abc"   // 正确
              add("abc")       // 正确
              add "abc"        // 错误:必须指定接收者
          }
      }
    
  • 尾递归函数

    关键字tailrec用来表示尾递归函数,他有形式上的要求,就是描述的函数需要有有条件,且最终不断的执行自己。大致的格式如下

    tailrec fun againFun(x: Int) = if( x < 0) x else againFun(--x)