快速入门Kotlin①基本语法

前言

23年底读了一遍"Kotlin官方文档",官方文档大而全,阅读下来,大有裨益。

此系列文章的目的是记录学习进程,同时,若能让读者迅速掌握重点内容并快速上手,那就再好不过了。

函数

带有两个 Int 参数、返回 Int 的函数。Unit返回值类型可省略。

Kotlin 复制代码
fun sum(x: Int, y: Int): Int {
    return x + y
}

将表达式作为函数体、返回值类型自动推断的函数:

Kotlin 复制代码
fun sum(x: Int, y: Int) = x + y

变量

val:不可变变量,val变量相当于Java中的final变量。优先使⽤val来避免副作⽤。副作用的产生往往与可变数据及共享状态有关。

Kotlin 复制代码
val a: Int = 1  // 立即赋值
val b = 2   // 自动推断出 `Int` 类型
val c: Int  // 如果没有初始值类型不能省略
c = 3       // 明确赋值

var:可变变量,一般用于声明局部变量。

Kotlin 复制代码
var x = 5 // 自动推断出 `Int` 类型
x += 1

字符串模板

字符串模板使用美元符号($)和花括号({})来嵌入变量或表达式。

Kotlin 复制代码
var a = 1
val s1 = "a is $a"
println(s1) //输出:a is 1

a =2
val s2 = "${s1.replace("is", "was")}, but now is $a"
println(s2) //输出:a was 1, but now is 2

条件表达式

if..else...

Kotlin 复制代码
fun maxOf(x: Int, y: Int): Int {
    if (x > y) {
        return x
    } else {
        return y
    }
}

fun maxOf(x: Int, y: Int): Int = if (x > y) x else y

when 表达式

Kotlin 复制代码
fun describe(obj: Any): String =
    when (obj) {
        1          -> "One"
        "Hello"    -> "Greeting"
        is Long    -> "Long"
        !is String -> "Not a string"
        else       -> "Unknown"
    }

空值与 null 检测

编译时检查和处理空引用,避免出现空指针异常。

|-------|----|---------|-----|---------|----|
| 可空类型 | ? | 安全转换操作符 | as? | Else操作符 | ?: |
| 安全操作符 | ?. | 非空断言操作符 | !! | | |

Kotlin 复制代码
fun main() {
    val nullableString: String? = null
    val nonNullString: String? = "Hello"

    // 安全调用操作符 (?.)
    println(nullableString?.length) // 输出: null
    println(nonNullString?.length) // 输出: 5

    // 安全转换操作符 (as?)
    val tmpStr: Any? = null
    val length: String? = tmpStr as? String
    println(length) // 输出: null

    // 非空断言操作符 (!!)
    try {
        val length2: Int = nullableString!!.length
        println(length2)
    } catch (e: NullPointerException) {
        println("发生了空指针异常")
    }

    // Else操作符 (?:)
    val result = nullableString ?: "默认值"
    println(result) // 输出: 默认值
}

类型检测与自动类型转换

is运算符检测一个表达式是否是某类型的示例,如果已经判断为A类型,则检测分支可以直接当A类型使用。

Kotlin 复制代码
fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // `obj` 在该条件分支内自动转换成 `String`
        return obj.length
    }

    // 在离开类型检测分支后,`obj` 仍然是 `Any` 类型
    return null
}

循环

for循环:

Kotlin 复制代码
fun main() {
    val list = listOf("apple", "banana", "otherfruit")
    for (item in list) {
        println(item)
    }

    for (index in list.indices) {
        println("item at $index is ${list[index]}")
    }
}
Kotlin 复制代码
输出:
apple
banana
otherfruit
item at 0 is apple
item at 1 is banana
item at 2 is otherfruit

while循环:

Kotlin 复制代码
fun main() {
    val list = listOf("apple", "banana", "otherfruit")
    var index = 0
    while (index < list.size) {
        println("item at $index is ${list[index]}")
        index++
    }
}

范围

使用 in 、step、downTo等运算符。

Kotlin 复制代码
fun main() {
    val x = 9
    val y = 10

    //使用 in 运算符来检测某个数字是否在指定区间内
    if (x in 1..y+1) {
        println("fits in range")
    }
    //区间迭代
    for (x in 1..5) {
        print(x)
    }
    println()

    //数列迭代
    for (x in 1..10 step 2) {
        print(x)
    }
    println()
    for (x in 9 downTo 0 step 3) {
        print(x)
    }
}
Kotlin 复制代码
输出:
fits in range
12345
13579
9630

集合

集合提供了循环遍历、判断是否包含其中、Lambda表达式表示过滤和映射等能力。

Kotlin 复制代码
fun main() {
    val fruits = listOf("banana", "avocado", "apple", "kiwifruit")
    //对集合进行循环遍历
    for (item in fruits) {
        println(item)
    }

    //使用in运算符判断集合是否包含某实例
    when {
        "orange" in fruits -> println("juicy")
        "apple" in fruits -> println("apple juice")
    }

    //Lambda表达式表示过滤和映射组合。
    fruits.filter { it.startsWith("a") }
        .sortedBy { it }
        .map { it.toUpperCase() }
        .forEach{println(it)}
}
Kotlin 复制代码
输出:
banana
avocado
apple
kiwifruit
apple juice
APPLE
AVOCADO

创建基本类及其实例

Kotlin 复制代码
val rectangle = Rectangle(5.0, 2.0)
相关推荐
hsx66614 小时前
Kotlin 协程中的 Dispatchers
kotlin
每次的天空17 小时前
Android-重学kotlin(协程源码第二阶段)新学习总结
android·学习·kotlin
stevenzqzq17 小时前
Kotlin 中主构造函数和次构造函数的区别
android·kotlin
开发者如是说20 小时前
言叶是如何对文件进行端到端加密的
android·kotlin·swift
小李飞飞砖20 小时前
kotlin
开发语言·单例模式·kotlin
小李飞飞砖21 小时前
kotlin中的冷流和热流
android·开发语言·kotlin
Kotlin上海用户组2 天前
Koin vs. Hilt——最流行的 Android DI 框架全方位对比
android·架构·kotlin
Kapaseker2 天前
当Object遇到Json你可能会碰到的坑
kotlin
RichardLai882 天前
Kotlin Flow:构建响应式流的现代 Kotlin 之道
android·前端·kotlin
程序员江同学2 天前
Kotlin/Native 编译流程浅析
android·kotlin