美文网首页kotlinkotlin
Kotlin-简约之美-基础篇(二):方法的定义和使用

Kotlin-简约之美-基础篇(二):方法的定义和使用

作者: 门心叼龙 | 来源:发表于2020-02-27 19:07 被阅读0次

    @[toc]

    方法定义

    定义语法
    fun  [方法名] ( [参数名] : [参数类型] ) : [返回类型]{
        ...
        return [返回值]
    }
    
    有返回值
    fun multiply(x: Int, y:Int): Int {
        return x * y
    }
    

    也可以转换为:

    fun multiply(x: Int, y: Int): Int = x * y
    

    还可以这样:

    var multiply = { x: Int, y: Int -> x * y }
    
    无返回值

    使用Unit代替返回类型:

    fun log(msg: String): Unit {
        print(msg)
    }
    

    Unit也可以省去:

    fun log(msg: String) {
        print(msg)
    }
    
    成员方法

    与Java一样通过对象.方法名的方式调用:

    fun main(args: Array<String>) {
        Test().method()
    }
    
    class Test{
        fun method(){
            print("hello")
        }
    }
    
    静态方法

    和Java一样通过类名.方法名的方式调用:

    fun main(args: Array<String>) {
        Test.com()
    }
    
    class Test{
        companion object{
            fun com(){
                print("com")
            }
        }
    }
    
    顶级方法

    在类外部定义的方法,可理解为静态方法,通过包名.方法名的方式调用:

    package a.b.c
    
    fun top(){
        print("top")
    }
    
    fun main(args: Array<String>) {
        a.b.c.top()
    }
    

    顶级方法与静态方法区别
    通过反编译可以知道,其实他们不在一个类中。
    如果有顶级变量会新生成一个[文件名+kt]的类,顶级方法就在其中。

    命名参数

    为什么要使用命名参数?因为使用命名参数可忽略参数的顺序,在调用时候非常方便,尤其是参数多的情况,调用时用参数名称和参数值同时出现的方法,同时提高代码的可读性.命名参数的语法要求:参数名和参数值用冒号分隔

    通过指明参数名称,可按任意顺序传参:

    fun main(args: Array<String>) {
        log(name = "mao", age = 18)
    }
    
    fun log(age: Int, name: String) {
        print("age:$age,name:$name")
    }
    

    可选参数

    为什么要使用可选参数?因为在方法参数过多,调用显得麻烦,在方法调用时不必传递所有参数,可选参数,又称为“默认参数”

    方法样例:

    fun logInfo(
            name: String,
            age: Int,
            married: Boolean = true,
            language: String = "Chinese"
    ) {
        println("[name:$name,age:$age,married:$married,language:$language");
    }
    

    必须传入未设置默认值的参数
    在上述logInfo方法中,name和age未设置默认值,必须传参,其它参数可自由选择:

    logInfo("ma",18)
    logInfo("ma",18,false);
    logInfo("ma",18,false,"English");
    

    可变参数

    • 使用vararg 修饰参数:
    fun logInfos(vararg infos: String) {
        for (info in infos) {
            print("$info  ")
        }
    }
    
    • 方法调用:
    logInfos("aaa","bbb","ccc")
    

    相关文章

      网友评论

        本文标题:Kotlin-简约之美-基础篇(二):方法的定义和使用

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