本文是对这篇文章的简单总结和一些最佳实践。

Scala 中有多个容易混淆的与 Nothingness 相关的概念,下面简单总结一下。

Nullnull

Null 本身是一个 trait

Null 只有一个实现: null

null 和 Java 中的 null 概念类似,可以理解为是为了兼容 Java 代码的必要而存在的。

Nil

Nil 表示的是一个 空 List

这个 空 List 的元素类型可以是任意类型,因为 Nil 是扩展自 List[Nothing]

Nothing

是个 trait

Nothing 是所有类型的子类型。没有任何实现。

None

NoneOption 类型的一种子类型。应该结合 Option, Some 一起使用。

详情可以参见我以前的一篇文章来理解。

Unit

是一种不返回任何值的方法的类型。

可以简单的理解为 void

一些最佳实践

null

  • 不要在代码中使用任何 null
  • 如果使用了 Java 的包,其中会返回 null,那就将结果类型换成返回 Option.

Option

  • 不要直接在 Option 类型的值上调用 get 方法。
  • 使用:
    • map
    • flatMap
    • for
    • 模式匹配

处理未初始化变量

  • 给变量一个默认值:比如空列表,空数组,空字符串等;
  • 如果变量可以在被初始化前访问,应该将其换成 Option 类型,并初始化成一个 None

Scala 方法

  • 永远不要返回 null
  • 如果有类似的需求,将其换成 Option 类型,返回 Some 或者 None