空安全 - inline-function/Sublimation GitHub Wiki
空安全
没有 null 裸奔——可空值用 Optional[T] 显式表示。
Optional 类型
Optional[T] 是两值枚举:
| 值 | 含义 |
|---|---|
Some(x) |
有值 x |
None |
空 |
var a: Optional[Nat] = Some(42)
var b: Optional[Nat] = None
可空类型语法糖:T? 就是 Optional[T],可以嵌套:
var a: Nat? = Some(42) // 等价 Optional[Nat]
var b: Nat?? = None // 等价 Optional[Optional[Nat]]
解构取值(when)
when (maybe) {
Some(v) -> print("有值:$v")
None -> print("空的")
}
安全调用 ?.
var y = maybe?.field // o 为空时整个表达式返回 None
var z = user?.name
安全替换 ?:(Elvis)
var name = maybeName ?: "无名" // 空时用默认值
Some(x) 可以直接赋给 T 变量(隐式转换):
var maybe: Nat? = Some(3)
var plain: Nat = maybe // 隐式 Some 解包;若 None 会失败,需谨慎
安全转换 as
var x = o as T // o 是 T 则转换,否则返回 None(不崩溃)
方法链
Optional 上的函数式方法:
maybe.map({ v -> v + 1 }) // Some(v+1) 或 None
maybe.flatMap({ v -> moreOpt(v) }) // 展平
maybe.getOrElse(0) // 取值或默认
maybe.isSome() / maybe.isNone() // 判断
一句话
- 拿空值 →
None;拿有值 →Some(x)。 - 读值 →
when { Some(v) -> ...; None -> ... }或方法糖。 - 不崩溃:
?.、?:、as都不会抛空指针异常。