空安全 - 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 都不会抛空指针异常。