『Java・Scalaで何も無い事を表すキーワード』を書いたら、コメントを貰った。ライブラリーとキーワードを混同しない方がよいとのこと。
確かに空のリストと空のオプションを表すものについては、Javaでは実際によく使うメソッドの方を記載したので、異なって見えるかも。
というわけで、その部分の修正版。
Java | Scala | 説明 |
---|---|---|
EMPTY_LIST | Nil | 空のListインスタンス。 |
EMPTY | None | 空のOptionインスタンス。 |
JavaもScalaもどちらもライブラリーの一部なので、使い方は以下のような感じ。(Listの例)
どちらもキーワードっぽい使い方だ。
Java | Scala |
---|---|
import static java.util.Collections.EMPTY_LIST; |
import scala.collection.immutable.Nil |
List<?> emptyList = EMPTY_LIST; |
val emptyList = Nil |
@SuppressWarnings("unchecked") |
val emptyList: List[String] = Nil あるいは val emptyList = Nil: List[String] あるいは val emptyList = Nil.asInstanceOf[List[String]] |
ただ、これだと目的の要素の型を明示するのが不便なので、普通は以下のようにする。
どちらもメソッド呼び出しの使い方だ。
Java | Scala |
---|---|
import java.util.Collections; |
import scala.collection.immutable.List |
List<String> emptyList = Collections.emptyList(); |
val emptyList = List.empty[String] |
※今回のScalaの例ではJavaと対比させる為にimport文を明記したが、実際にはscala.collection.immutableパッケージのクラス(やオブジェクト等)は暗黙にインポートされているので、記述する必要は無い(というか記述しないのが普通)。
(それもあって、Nilはライブラリーという意識ではなく、キーワードと勘違いされるのかもしれないが^^;)
あと、冒頭に掲載した表では、JavaのOptionalについて「EMPTY」を載せた。
これは実際にOptionalクラスのソースに書かれている名前ではあるのだが、 可視性がprivateなのでEMPTY_LISTの様に直接使うことは出来ない^^;
そういう理由で、前回のブログではメソッド呼び出しの形式の方を書いた。
なお、空のオプションの記述方法は以下のようになる。(ScalaのNoneなんか出て来なーいw)
Java | Scala |
---|---|
import java.util.Optional; |
import scala.Option |
Optional<String> emptyOption = Optional.empty(); |
val emptyOption = Option.empty[String] |
String s = null; |
val s: String = null |
Optional<String> emptyOption = Optional.ofNullable(null); |
val emptyOption = Option(null: String) |
※Scalaではscalaパッケージのクラス群は暗黙にインポートされるので、このimport文は記述しないのが普通。