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

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系列的教程,一是使自己记忆和理解的更加深刻,二是可以分享给同样想学习Kot...
    胡奚冰阅读 3,909评论 0 4
  • 在Kotlin中创建集合 上一章我们已经使用setOf函数创建一个set了。同样的,我们也可以用类似的方法创建一个...
    4e70992f13e7阅读 11,605评论 0 4
  • 不重要的废话 前段时间看了一遍《Programming Kotlin》,主要目的是想提高自己的英文阅读能力,能力提...
    珞泽珈群阅读 8,699评论 1 7
  • 华丽的影子在光斑下跳动 纤细,轻盈 逆风而行的舞动 带着肆意轻狂的芬芳 跳跃,仰起 飞起弧度斑斓的彩条 空寂的舞台...
    不爱念旧的左左阅读 1,592评论 0 0
  • 今天雨宝11个月4天终于学会爬了,平时爷爷奶奶担心肮脏一直抱着很少让她爬!所以我家雨宝十一个月,还不太敢地上爬,只...
    牛小丫53阅读 1,540评论 0 1