1. Kotlin基础语法的核心总结

一灰灰blogKotlinKotlin约 886 字大约 3 分钟

1. 变量与数据类型

// 不可变变量(推荐优先使用)
val name: String = "John"
val age = 30  // 类型自动推断

// 可变变量
var score: Double = 95.5
var isActive = true  // 布尔类型

// 空安全
var nullableStr: String? = null  // 允许为 null
val length = nullableStr?.length ?: 0  // 安全调用 +  Elvis 操作符

2. 函数

// 标准函数
fun sum(a: Int, b: Int): Int {
    return a + b
}

// 单表达式函数
fun multiply(a: Int, b: Int) = a * b

// 默认参数
fun greet(name: String = "Guest") = "Hello, $name!"

// 可变参数
fun printAll(vararg items: String) {
    items.forEach { println(it) }
}

3. 条件表达式

// if 作为表达式
val max = if (a > b) a else b

// when 表达式(替代 switch)
when (x) {
    1 -> println("One")
    2, 3 -> println("Two or Three")
    in 4..10 -> println("In range")
    else -> println("Other")
}

// 智能类型转换
fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        return obj.length  // 自动转换为 String 类型
    }
    return null
}

4. 循环

// for 循环
for (i in 1..5) println(i)  // 闭区间 [1, 5]
for (i in 1 until 5) println(i)  // 半开区间 [1, 5)
for (i in 5 downTo 1 step 2) println(i)  // 降序,步长 2

// while 循环
while (x > 0) { x-- }
do { x++ } while (x < 10)

// 遍历集合
val list = listOf("a", "b", "c")
for ((index, value) in list.withIndex()) {
    println("Index $index: $value")
}

5. 集合

// 不可变集合
val numbers = listOf(1, 2, 3)  // 只读列表
val map = mapOf("key1" to 1, "key2" to 2)

// 可变集合
val mutableList = mutableListOf(1, 2, 3)
mutableList.add(4)

// 集合操作
val doubled = numbers.map { it * 2 }  // [2, 4, 6]
val evenNumbers = numbers.filter { it % 2 == 0 }  // [2]

6. 类与对象

// 普通类,有两个成员变量name, age; 提供了一个方法 greet()
class Person(var name: String, var age: Int) {
    fun greet() = "Hello, I'm $name"
}

// 数据类(自动生成 toString、equals、hashCode 等)
data class User(val id: Int, val name: String)

// 单例
object Settings {
    val appName = "MyApp"
}

// 继承(默认类不可继承,需加 open)
open class Animal(val name: String) {
    open fun sound() = "..."
}

class Dog(name: String) : Animal(name) {
    override fun sound() = "Woof!"
}

7. 空安全

// 可空类型
var email: String? = null
email?.length  // 安全调用,email 为 null 时返回 null
email!!.length  // 非空断言,email 为 null 时抛出异常

// 安全转换
val person: Person? = getPerson()
val name = person?.name ?: "Unknown"  // Elvis 操作符

8. 扩展函数 / 属性

// 扩展函数
fun String.lastChar() = this[this.length - 1]

// 扩展属性
val String.firstChar: Char
    get() = if (isEmpty()) ' ' else this[0]

9.高阶函数与 Lambda

// 高阶函数(接收函数作为参数)
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

// Lambda 表达式
val sum = calculate(1, 2) { x, y -> x + y }

// 集合高阶函数
val numbers = listOf(1, 2, 3, 4)
val sumEven = numbers.filter { it % 2 == 0 }.sum()  // 6

10. 异常处理

try {
    val result = divide(10, 0)
} catch (e: ArithmeticException) {
    println("Error: ${e.message}")
} finally {
    // 总是执行
}

// 作为表达式
val result = try {
    divide(10, 2)
} catch (e: Exception) {
    0
}

11. 作用域函数

val person = Person("Alice", 25)

// let:对对象执行操作并返回结果
val nameLength = person.let { it.name.length }

// with:对同一个对象执行多个操作
with(person) {
    age = 26
    println("$name is $age years old")
}

// apply:配置对象并返回自身
val newPerson = Person("", 0).apply {
    name = "Bob"
    age = 30
}

12. main启动

class BasicTest {
    // 高阶函数(接收函数作为参数)
    fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
        return operation(a, b)
    }
}

fun main(args: Array<String>) {
    val basic = BasicTest()
    val num = basic.calculate(1, 2) { a, b -> a + b }
    println("hello world ${num}")
}

13. 其他特性

// 字符串模板
val name = "Alice"
println("Hello, $name!")  // 简单变量
println("Price: ${goods.price}")  // 表达式

// 区间
if (x in 1..10) println("In range")
if (x !in 11..20) println("Not in range")

// 解构声明
val (name, age) = getUser()  // 用于数据类

// 类型转换
alue as String 
value as? String //(安全转换)

// 多行字符串
val desc = """
  多行文本字符串
"""

// 延迟初始化
lateinit var config: Config
Loading...