美文网首页
Kotlin学习笔记(四)—— 函数

Kotlin学习笔记(四)—— 函数

作者: CoderCyl | 来源:发表于2019-12-05 21:46 被阅读0次
    函数的定义

    定义一个函数由关键词fun、函数名、参数列表,返回值类型和函数体组成。fun是function的意思;函数名可以是任何符合命名规范的词;参数列表由0个或多个组成;形参在前,类型在后,用冒号(:)隔开;返回值类型紧接在函数列表括号后面,也是用冒号将函数列表和返回值类型隔开,无返回值默认是返回Unit,也可以省略不写;函数体是返回值类型右边一对大括号之前的代码块。

    fun funDemo(a: Int, b: Int): Int {
        return a + b
    }
    
    或者简写成
    
    fun funDemo(a: Int,b: Int) = a + b
    
    可变长参数

    vararg 修饰符可以接收多个参数,和Java中定义可变长参数用...(int...)一样的。

    // Java
    private int add(int... numbers) {
        int sum = 0;
        for(int number:bumbers){
            sum += number;
        }
        return sum;
    }
    
    >> Log.d("TAG", add(1, 2, 3, 4))
    10
    
    // Kotlin
    fun add(vararg numbers: Int) {
        var sum = 0
        for (number in numbers) {
            sum += number
        }
        return sum
    }
    
    >> println(add(1, 2, 3, 4))
    10
    
    或者
    
    val arr = intArrayOf(1, 2, 3, 4)
    >> println(add(*arr))
    10
    

    当传入数组时,数组名前面需要加一个星号(*),星号是展开操作符,表示把这个数组全部展开。

    成员函数

    定义在类、object或者接口内的函数称为成员函数。

    class Rect {
        fun getArea(width: Int, height: Int): Int {
            return width * height
        }
    }
    

    getArea()就是一个成员函数

    本地函数/嵌套函数

    本地函数也叫嵌套函数,是指在函数里面声明的函数。嵌套函数的作用域只在其外部函数内,在其外部就失去了作用。

    fun printPrice(price: Int, number: Int) {
        fun totalPrice(): Int {
            return price * number
        }
    
        print(totalPrice())
    }
    

    以上代码只是一个非常简单的例子。在外部方法中有很多相同的代码也是可以抽取出来封装成嵌套函数。

    命名参数和默认参数

    当调用一个函数参数很多时,很可能就无法知道参数的具体含义是什么了,可读性就比较差了。好在IDE会很智能的提示各个参数的含义。而且Kotlin也支持显示的将参数名写出来,一旦写了命名参数后,参数的顺序就不重要了。

    fun getVolume(length: Int, width: Int, height: Int): Int {
        return length * width * height
    }
    
    >> getVolume(10, 20 ,30)
    >> getVolume(length = 10, width = 20, height = 30)
    >> getVolume(width = 20, length = 10, height = 30)
    

    以上三种调用方法完全等价。

    但是如果参数 height 默认为 30 呢?难道每次调用都需要再传一次30吗?这感觉很多余。这种情况可以给函数指定默认参数值。

    fun getVolume(length: Int, width: Int, height: Int = 30): Int {
        return length * width * height
    }
    
    >> getVolume(10, 20 ,30)
    >> getVolume(10, 20)
    >> getVolume(length = 10, width = 20, height = 30)
    >> getVolume(width = 20, length = 10, height = 40)
    
    函数操作符

    重载操作符必须要用 operator 关键字以及用对应的英文名作为函数名。

    操作 函数名
    !x x.not()
    -y y.unaryMinus()
    +z z.unaryPlus()
    a..b a.rangeTo(b)
    c + d c.plus(d)
    e - f e.minus(f)
    g * h g.times(h)
    i/j i.div(j)
    m%n m.mod(n)

    in 和 contains

    in 用在遍历和判断包含关系时候使用。in 关键字对应的函数名是 contains。

    val arr = arrayOf(1, 2, 3, 4)
    val a = 1 in arr
    val b = arr.contains(1)
    >> println(a)
    >> println(b)
    
    true
    true
    

    set 和 get

    set 对应数组设置值,get对应数组取值[]

    val arr = arrayOf(1, 2, 3, 4, 5)
    
    >> println(arr[1])
    2
    
    >> println(arr.get(1))
    2
    
    >> arr[1] = 10
    >> println(arr.joinToString())
    1, 10, 2, 3, 4, 5
    
    >> arr.set(1, 10)
    >> println(arr.joinToString())
    1, 10, 2, 3, 4, 5
    
    扩展函数

    给已有的类加入新的函数而又不修改原有的类。比如给 Int 类增加一个对一个数求平方加 1 的函数。

    fun Int.squarePlusOne(): Int {
        return this * this +1
    }
    
    >> println(10.squarePlusOne())
    101
    

    相关文章

      网友评论

          本文标题:Kotlin学习笔记(四)—— 函数

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