zoukankan      html  css  js  c++  java
  • Kotlin函数之fun?function?

    在Kotlin中申明一个函数要使用fun关键字,至于为啥用fun这个缩写也没啥奇怪的,可能是JB家创造这门语言的人喜欢……好吧好吧,fun就fun,你喜欢就好

    其实不管是fun还是function,我们在ide中敲代码,这些关键字都是有提示的,例如在intellij idea中,在合适的位置敲一个f就会有fun的提示。

    函数申明:

    先看看如何申明一个最基本的函数,求两个Int之和

    fun add(num1: Int,num2: Int): Int{
    return num1 + num2
    }
    var result: Int = add(1,1)//函数调用

    无返回值的函数,返回类型其实是Unit,此时返回类型是可以省略的

    //此时返回类型可以省略
    fun testFun():Unit{
        print("======")
    }

    如果函数体是单个的表达式,就可以简化函数的定义,具体来书就是不要大括号了,直接在返回类型后面 “= 表达式”

    fun addNum(num1: Int,num2: Int): Int = num1 + num2//单条普通语句
    fun maxNum(num1: Int,num2: Int): Int = if (num1 > num2) num1 else num2//if表达式
    fun getScroeLevel(scroe: Int): String = when{//when表达式
            scroe == 100 -> "very good!"
            scroe >= 80 -> "good!"
            scroe >= 60 -> "passed!"
            else -> "bad"
        }

    函数参数:

    现在函数可以有默认值了,这在一定程度上可以减少函数重载

    //第二个参数使用默认实参
    fun add(num1: Int,num2: Int = 10): Int{
        return num1 + num2
    }

    再看一个默认参数在继承结构中的规则

    open class Base{
        open fun test(id: Int = 10){
    
        }
    }
    
    class Dev : Base(){
        //重写父类中带有默认参数的方法时不允许再有默认参数,其默认值默认是父类中的默认参数
        override fun test(id: Int) {
            print("$id")
        }
    }
    
    fun main(args: Array<String>) {
        Dev().test()//输出10
    }

    命名参数的使用,在默认参数很多的情况下,如果只想改变其中的某一个默认参数时,这个语法很有用(但是Kotlin调用Java写的方法是不能使用)

    class User {
        fun setUserInfo(id: Int,
                        name: String,
                        param1: Boolean = true,
                        param2: Boolean = false,
                        param3: Boolean = true,
                        param4: Boolean = false) {
            //TODO
        }
    }
    
    fun main(args: Array<String>) {
        var user: User = User()
        //次数我只想改变param4
        user.setUserInfo(1, "liuliqianxiao", true, false, true, true)//传统写法
        user.setUserInfo(1, "liuliqianxiao", param4 = true)//使用命名参数的写法
    }

    返回类型推导:

    如果函数使用表达式的方式定义的,则函数返回类型是自动推导的,也就是可以省略的,但是如果是用大括号来定义的函数体,则必须返回值不能自动推导。

    //虽然函数体是一个很简单的表达式,但是返回类型也必须明确标识出来,除非是要返回Unit,否则不能省略
    fun addNum(num1: Int, num2: Int): Int {
        return num1 + num2
    }
    
    fun addNum1(num1: Int, num2: Int) = num1 + num2//使用函数表达式的方式返回类型是可以自动推导出来滴

    函数基础篇就写到这里咯,下一篇准备讲讲函数方面稍微高级一点的语法

  • 相关阅读:
    scala中 object 和 class的区别
    scala中的apply方法与unapply方法
    Scala中的样例类详解
    Scala 中下划线的一些魔法
    Hadoop搭建配置参数调优
    设置ESX/ESXi中(Linux)虚拟机从U盘引导启动
    CentOS下编译安装Busybox
    LRU算法简单实现
    Spark 3.0 动态分区裁剪(Dynamic Partition Pruning)
    Hive中的数据分桶以及使用场景
  • 原文地址:https://www.cnblogs.com/liuliqianxiao/p/7142662.html
Copyright © 2011-2022 走看看