/** * 第 1 章 · Kotlin 是什么 — 第一段示例 * * 这段代码体现了 Kotlin 的几个特点,对照注释能快速感受跟 Java 的差别。 * * 运行方式(在装好 Kotlin CLI 之后): * kotlinc HelloKotlin.kt -include-runtime -d hello.jar * java -jar hello.jar * * 也可以直接复制到 https://play.kotlinlang.org/ 在线运行。 */ // ---------- 1. 顶层函数:不用包在 class 里 ---------- fun main() { println("Hello, Kotlin!") // ---------- 2. 变量:val 只读 / var 可变 ---------- val name: String = "Alice" // 显式类型 val age = 25 // 自动推断为 Int var counter = 0 // var 才能后续重新赋值 counter += 1 // ---------- 3. 字符串模板:$ 直接插值 ---------- println("$name, $age 岁,counter = $counter") println("一年后她 ${age + 1} 岁了") // ---------- 4. Null 安全:类型系统区分可空与不可空 ---------- val nickname: String? = null // 注意问号 val length = nickname?.length ?: 0 // ?. 安全调用 + ?: Elvis 默认值 println("昵称长度 = $length") // ---------- 5. 集合 + 函数式操作 ---------- val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val doubled = numbers .filter { it % 2 == 0 } // 只留偶数 .map { it * 2 } // 每个 ×2 println("偶数翻倍: $doubled") // → [4, 8, 12, 16, 20] // ---------- 6. data class:一行定义包含 equals / hashCode / toString 的类 ---------- data class User(val id: String, val name: String, val age: Int) val u1 = User("u001", "Alice", 25) val u2 = User("u001", "Alice", 25) println("u1 == u2 ? ${u1 == u2}") // true(结构相等) println(u1) // User(id=u001, name=Alice, age=25) // copy 一个改了年龄的副本,常用于不可变数据更新 val u3 = u1.copy(age = 26) println("u3 = $u3") // ---------- 7. 扩展函数:给已有类加方法 ---------- fun String.shout(): String = this.uppercase() + "!" println("hello".shout()) // → HELLO! // ---------- 8. when 表达式:Java switch 的现代版 ---------- val grade = when (age) { in 0..6 -> "幼儿" in 7..17 -> "少年" in 18..40 -> "青年" in 41..65 -> "中年" else -> "老年" } println("$name 属于 $grade") }