• Kotlin学习之函数


    函数定义

    fun main(args: Array<String>) {
        println(sum(1, 2))
    }
    //函数定义
    fun sum(a: Int, b: Int): Int {
        return a + b
    }
    

    默认参数

    fun main(args: Array<String>) {
        println(sum())
    }
    //包含默认参数
    fun sum(a: Int = 0, b: Int = 0): Int {
        return a + b
    }
    

    参数可以有默认值,可以减少很多重载的方法。反编译结果为

    点击查看代码
    public final class FirstDemoKt {
       public static final void main(@NotNull String[] args) {
          Intrinsics.checkParameterIsNotNull(args, "args");
          int var1 = sum$default(0, 0, 3, (Object)null);
          System.out.println(var1);
       }
    
       public static final int sum(int a, int b) {
          return a + b;
       }
    
       // $FF: synthetic method
       public static int sum$default(int var0, int var1, int var2, Object var3) {
          if ((var2 & 1) != 0) {
             var0 = 0;
          }
    
          if ((var2 & 2) != 0) {
             var1 = 0;
          }
    
          return sum(var0, var1);
       }
    }
    

    具名参数

    fun main(args: Array<String>) {
        println(sum(b = 2, a = 3))
    }
    
    fun sum(a: Int, b: Int): Int {
        return a + b
    }
    

    参数不仅可以按照位置传递,也可以按照名称传递。

    可变参数

    fun main(args: Array<String>) {
        println(sum(1, 2, 3))
        val nums = intArrayOf(1, 2, 3)
        println(sum(*nums))//解构赋值
    }
    //包含可变参数
    fun sum(vararg nums: Int): Int {
        var sum = 0
        for (num in nums) {
            sum += num
        }
        return sum
    }
    

    lambda表达式参数

    fun main(args: Array<String>) {
        //第一种方式
        var ret = calc(1, 2, { x, y -> x + y })
        println(ret)
        //第二种方式
        ret = calc(1, 2) { x, y ->
            x + y
        }
        println(ret)
    }
    //包含lambda表达式参数
    fun calc(a: Int, b: Int, oper: (x: Int, y: Int) -> Int): Int {
        return oper(a, b)
    }
    

    如果最后一个参数是lambda表达式,那么既可以在括号内传入,也可以在括号外传入。

    fun main(args: Array<String>) {
        intArrayOf(1, 5, 9)
            .filter { it > 5 }
            .map { it * it }
            .forEach { println(it) }
    }
    

    kotlin中数组和集合提供的很多方法都是这种格式,使用括号外传参的方式更加的友好,IDE也是优先选择这种。

    内联函数

    fun main(args: Array<String>) {
        println(sum(1, 2))
    }
    //内联函数定义
    inline fun sum(a: Int, b: Int): Int {
        return a + b
    }
    

    内联函数表示直接将函数的方法体内容内联到调用方,相当于

    fun main(args: Array<String>) {
        val a = 1
        val b = 2
        println(a + b)
    }
    

    参考

    Kotlin 教程
    学习 Kotlin

  • 相关阅读:
    this 指向 及 调用方式
    页面布局上 左 右底部
    Thread Safety线程安全
    sql查删更
    LinuxMysql命令操作数据库
    excel链接sharepoint 用于 Excel 的 Microsoft Power Query
    W7无法更新
    发票点数计算
    sharepoint OWA问题解决
    zend studio 做前端推荐安装的插件
  • 原文地址:https://www.cnblogs.com/strongmore/p/16324354.html
Copyright © 2020-2023  润新知