kotlin基础语法

时间:2023-02-10 13:08:21

问题背景

我们在安卓开发日常开发和学习过程中,或多或少项目中都会使用kotlin了,现对kotlin的一些基础语法进行总结,持续更新。

问题分析

1、函数定义

kotlin中函数定义使用关键字 fun,参数格式为:参数 : 类型,代码如下:

/**
 * 求和函数,传入int a, int b
 * 返回int类型
 */
fun sum(a: Int, b: Int): Int {
    // Int 参数,返回值 Int
    return a + b
}

无返回值的函数(类似Java中的void),代码如下:

fun printSum(a: Int, b: Int): Unit {
    print(a + b)
}

/**
 * 如果是返回 Unit类型,则可以省略(对于public方法也是这样):
 */
public fun printSum(a: Int, b: Int) {
    print(a + b)
}

2、可变长参数函数

kotlin中函数的变长参数可以用 vararg 关键字进行标识,代码如下:

/**
 * 传入可变长参数
 */
fun vars(vararg v:Int){
    for(vt in v){
        print(vt)
    }
}

fun main(args: Array<String>) {
    vars(1,2,3,4,5)  // 运行结果:输出12345
}

3、lambda(匿名函数)

kotlin中lambda表达式使用实例,代码如下:

fun main(args: Array<String>) {
    val sumLambda: (Int, Int) -> Int = {x,y -> x*y}
    println(sumLambda(1, 2))  // 运行结果:输出 2
}

4、定义常量与变量

kotlin中,可变变量定义:var 关键字,不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量),代码如下:

fun main(args: Array<String>) {
    val a: Int = 1
    val b = 1       // 系统自动推断变量类型为Int
    val c: Int      // 如果不在声明时初始化则必须提供变量类型
    c = 1           // 明确赋值
    var x = 5        // 系统自动推断变量类型为Int
    x += 1           // 变量可修改
}

5、字符串模板

kotlin中,$ 表示一个变量名或者变量值,$varName 表示变量值,${varName.fun()} 表示变量的方法返回值,代码如下:

fun main(args: Array<String>) {
    var a = 1
    // 模板中的简单名称
    val s1 = "a is $a"

    a = 2
    // 模板中使用表达式
    val s2 = "${s1.replace("is", "was")}, but now is $a"
}

6、NULL检查机制

Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式:(1)字段后加!!像Java一样抛出空异常(2)字段后加?可不做处理返回值为 null 或配合 ?: 做空判断处理,代码如下:

fun main(args: Array<String>) {
    // 类型后面加?表示可为空
    val age: String? = "23"
    // 抛出空指针异常
    val ages = age!!.toInt()
    // 不做处理返回 null
    val ages1 = age?.toInt()
    // age为空返回-1
    val ages2 = age?.toInt() ?: -1
}

7、类型检测及自动类型转换

kotlin中可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。代码如下:

fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // 做过类型判断以后,obj会被系统自动转换为String类型
        return obj.length
    }

    //在这里还有一种方法,与Java中instanceof不同,使用!is
    // if (obj !is String){
    //   // XXX
    // }

    // 这里的obj仍然是Any类型的引用
    return null
}

8、区间

kotlin中区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。代码如下:

fun main(args: Array<String>) {
    for (i in 1..4) print(i) // 输出“1234”

    for (i in 4..1) print(i) // 什么都不输出

    if (i in 1..10) { // 等同于 1 <= i && i <= 10
        println(i)
    }

    // 使用 step 指定步长
    for (i in 1..4 step 2) print(i) // 输出“13”

    for (i in 4 downTo 1 step 2) print(i) // 输出“42”
    
    // 使用 until 函数排除结束元素
    for (i in 1 until 10) {   
        // i in [1, 10) 排除了 10
        println(i)
    }
}

问题总结

本文主要对kotlin中常用的部分基础语法进行了介绍,持续更新,有兴趣的同学可以进一步深入研究。