在代码中使用 Option 和字符串代替 Some

M.G*_*.G. 1 null scala

我见过很多次这样的代码:

...
val aString: String = someFunctionDataReturnsAString()
...
if (someCondition) Some(aString)
else 
...

Run Code Online (Sandbox Code Playgroud)

创建新的Optionusing是否正确Some(aString)aString如果由于某种原因结果is的值怎么办nullif将句子替换为:不太好

if (someCondition) Option(aString)
Run Code Online (Sandbox Code Playgroud)

因为:

val a = Some("hello")
val b: String = null
val c = Some(b)
val d = Option(b)
println(a)
println(c)
println(d)
Run Code Online (Sandbox Code Playgroud)

将在控制台打印:

Some(hello)
Some(null)
None
Run Code Online (Sandbox Code Playgroud)

Option当传递字符串作为参数时,看起来是一个更好的主意,所以如果字符串是will benull的值。OptionNone

我已经看到要审查的代码,我认为对于这样的情况,应该添加一条注释,要求替换Some(aString)Option(aString).

Ali*_*iel 5

你是对的。假设您的字符串可以为空,建议使用Option(aString)

def apply[A](x: A): Option[A]

一个工厂, 如果参数不是,或者是,Option则创建。Some(x)nullNonenull

x- 价值

返回 -Some(value)如果value != null,None如果value == null

Option提到两者都有各自的用例,因此程序员最终决定哪一个更适合他的特定需求:

与偶尔会返回 null 的代码进行交互可以安全地包装在scala.Option“become”Nonescala.Some“其他”中。

就个人而言,由于字符串是不可变的,并且您不能真正拥有未初始化的字符串(因为 Scala 总是要求您初始化它们 - 除非您使用var变量,无论如何这都不是推荐的 Scala 编程方式),所以您很少会这样做实际上在代码中遇到空字符串。

话虽如此,人们仍然可以决定每次都去Option(aString),而且完全没问题。