美文网首页
Kotlin 学习笔记:基本语法和函数

Kotlin 学习笔记:基本语法和函数

作者: nxiangbo | 来源:发表于2018-12-26 20:53 被阅读0次

    Kotlin学习笔记:概述
    Kotlin学习笔记:基本语法和函数
    Kotlin学习笔记:类和接口
    Kotlin学习笔记:lambda编程
    Kotlin学习笔记:类型系统
    Kotlin学习笔记:泛型
    Kotlin学习笔记:注解和反射

    • 变量
    val str = "hello" // val修饰的变量是不可变的,相当于java的final变量
    var count = 12  // var修饰的变量 是可变的
    
    • when表达式代替switch语句
    fun getMnemonic(color: Color) =
        when (color) {
            Color.RED -> "Richard"
            Color.ORANGE -> "Of"
            Color.YELLOW -> "York"
            Color.GREEN -> "Gave"
            Color.BLUE -> "Battle"
            Color.INDIGO -> "In"
            Color.VIOLET -> "Vain"
        }
    >>> println(getMnemonic(Color.BLUE))
    Battle
    
    • if() else是表达式。说明if() else 可以作为赋值给变量,也可以作为返回值。
    fun main(args: Array<String>) {
        val name = if (args.size > 0) args[0] else "Kotlin"
        println("Hello, $name!")
    }
    

    函数

    image.png

    声明函数的语法

    函数声明语法

    Kotlin也有与Java相对应的main函数,定义方式如下

    fun main(args: Array<String>) {
        println("hello Kotlin")
    }
    

    参数

    • 命名参数
    • 支持默认参数值

    假如需要写一个在list列表中将元素用分隔符分割并打印以String类型打印的功能。

    一般情况下,可以这样写。

    fun <T>joinToString(collection: Collection<T>, 
                        separator: String, 
                        prefix: String, 
                        suffix: String): String{
        val result = StringBuilder(prefix)
    
        for((index, element) in collection.withIndex()) {
            if (index >0) result.append(separator)
            result.append(element)
        }
        result.append(suffix)
        return result.toString()
    }
    

    为了解决过度重载的问题,可以使用默认参数值。

    fun <T>joinToString(collection: Collection<T>, 
                         separator: String=",", 
                         prefix: String="", 
                         suffix: String=""): String{
        val result = StringBuilder(prefix)
    
        for((index, element) in collection.withIndex()) {
            if (index >0) result.append(separator)
            result.append(element)
        }
        result.append(suffix)
    
        return result.toString()
    }
    

    可以使用以下方式调用

    joinToString(list)
    joinToString(list, ";")
    

    顶层函数

    在Java中经常会用到一些工具类,这些工具类中往往都是静态方法,没有类的实例对象,例如Jdk中的Collections类,以及我们自己定义的一些放在util包下的工具类。在Kotlin中,完全不需要这些类。Kotlin引入了顶层函数,可以替代静态类。

    那么如何定义顶层函数呢?

    创建一个Kotlin文件,然后将函数添加进去即可。以joinToString为例,

    fun <T>joinToString(...): String{
      ....
    }
    

    等价于

    /* Java */
    package strings;
    public class JoinKt {
        public static String joinToString(...) { ... }
    }
    

    扩展函数

    定义:函数定义在类的外部,但可以像调用该类的成员函数一样调用

    • 扩展函数的语法

    接收者类型:要扩展类或接口的名称,放到要添加的函数前。

    接收者对象:用来调用扩展函数的对象

    扩展函数声明
    • 扩展函数如何调用及优点

    扩展函数可以在不更改原来类的情况下,对类的方法进行拓展。扩展函数可以像被扩展类的方法一样调用。

    举例来讲,自定义一个String类的扩展函数lastChar,该函数可以取字符串的最后一个字符。

    fun String.lastChar(): Char = get(length-1)
    

    在Kotlin代码中调用

    import com.nxiangbo.kotlin_learning.function.lastChar
    "str".lastChar()
    

    在Java代码中调用

    import com.nxiangbo.kotlin_learning.function.FunctionLearnKt;
    public class FunctionTest {
        public void Test(){
            FunctionLearnKt.lastChar("str");
        }
    }
    
    • 扩展函数能做什么

    在Kotlin标准库中,大量使用扩展函数。例如,String等

    相关文章

      网友评论

          本文标题:Kotlin 学习笔记:基本语法和函数

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