快速入门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)
相关推荐
萌面小侠Plus2 小时前
Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机
android·性能优化·kotlin·工具类·低端机
wk灬丨6 小时前
Android Kotlin Flow 冷流 热流
android·kotlin·flow
晨曦_子画7 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
大福是小强7 小时前
005-Kotlin界面开发之程序猿初试Composable
kotlin·界面开发·桌面应用·compose·jetpack·可组合
&岁月不待人&9 小时前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
小白学大数据12 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
bytebeats2 天前
Kotlin 注解全面指北
android·java·kotlin
jzlhll1232 天前
kotlin android Handler removeCallbacks runnable不生效的一种可能
android·开发语言·kotlin
&岁月不待人&2 天前
Kotlin 协程使用及其详解
开发语言·kotlin
苏柘_level62 天前
【Kotlin】 基础语法笔记
开发语言·笔记·kotlin