『Java・Scalaで何も無い事を表すキーワード』を書いたら、コメントを貰った。ライブラリーとキーワードを混同しない方がよいとのこと。
確かに空のリストと空のオプションを表すものについては、Javaでは実際によく使うメソッドの方を記載したので、異なって見えるかも。
というわけで、その部分の修正版。
JavaもScalaもどちらもライブラリーの一部なので、使い方は以下のような感じ。(Listの例)
どちらもキーワードっぽい使い方だ。
import java.util.List; import scala.collection.immutable.Nil
import scala.collection.immutable.List List<?> emptyList = EMPTY_LIST; val emptyList = Nil @SuppressWarnings("unchecked")
List<String> emptyList = (List<String>)EMPTY_LIST; val emptyList: List[String] = Nil
あるいは
val emptyList = Nil: List[String]
あるいは
val emptyList = Nil.asInstanceOf[List[String]]
ただ、これだと目的の要素の型を明示するのが不便なので、普通は以下のようにする。
どちらもメソッド呼び出しの使い方だ。
import java.util.List; 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)
JavaScala import java.util.Optional; import scala.Option Optional<String> emptyOption = Optional.empty(); val emptyOption = Option.empty[String] String s = null;Optional<String> emptyOption = Optional.ofNullable(s); val s: String = null
val emptyOption = Option(s) Optional<String> emptyOption = Optional.ofNullable(null); val emptyOption = Option(null: String)
※Scalaではscalaパッケージのクラス群は暗黙にインポートされるので、このimport文は記述しないのが普通。