第 3 章 · 基本语法(val / var / 类型 / 控制流)

5 个互动 demo 帮你快速建立对 Kotlin 基础语法的"肌肉记忆"。

🔒 val vs var:可不可以改?

下面 5 段操作,预测哪些能成功,哪些会编译报错。点"试一下"看结果。

val name = "Alice" name = "Bob"
var age = 25 age = 26
val list = mutableListOf(1,2) list.add(3)
val list = mutableListOf(1,2) list = listOf(3,4)
const val PI = 3.14 放在 fun foo() 内

💡 心法总结

  • val = 引用不可变,但对象内部可能可变(看类型)
  • var = 引用可重新赋值
  • const val = 编译期常量,必须 top-level / object,必须基本类型
  • 最佳实践:默认全部用 val,需要时再改 var

🔢 数字类型与类型推断

Byte 8 bit
范围: -128 ~ 127
val b: Byte = 100
Short 16 bit
范围: -32768 ~ 32767
val s: Short = 1000
Int 32 bit
范围: -21亿 ~ 21亿
val i = 100  // 默认 Int
Long 64 bit
范围: 极大整数
val l = 100L  // 注意 L 后缀
Float 32 bit
单精度浮点
val f = 3.14f  // 注意 f 后缀
Double 64 bit
双精度(默认浮点类型)
val d = 3.14   // 默认 Double

⚠️ Kotlin 不会自动转换数字类型!

Java 里 int → long 会自动转,Kotlin 强制要求显式 .toLong()

val i: Int = 100 val l: Long = i
val i: Int = 100 val l: Long = i.toLong()
val l: Long = 100 字面量 100 自动当 Long

✨ 字符串模板实验台

修改下面的变量值,再修改模板,立即看到结果。

📤 输出

📜 多行字符串

三个引号 """..."""+ .trimIndent() 让你优雅写多行 SQL/JSON:

val sql = """
    SELECT id, name, age
    FROM users
    WHERE age > $age
""".trimIndent()

🌳 when 表达式决策树(成绩等级判定)

输入分数,看 when 的每一条分支怎么"流过",最终命中哪一条。

val grade = when { score !in 0..100->"无效分数" score >= 90->"A" score >= 80->"B" score >= 70->"C" score >= 60->"D" else->"F" }
点 ▶ 求等级 看结果

📐 Range 范围可视化

选择不同的范围语法,看绿色 = 包含、红色 = 不包含。

🧪 in 操作符测试