JavaからScalaへのスイッチャーとして、私は日常的にnull処理のようなものを書き直していることに気づきます。
val itemOpt: Option[Item] = items.get(coords) // "items" is something like a Map
if (itemOpt.isDefined) {
val item = itemOpt.get
// do something with item, querying item fields a lot of times, for example
if (item.qty > 10) {
storeInVault(item.name, item.qty, coords)
} else {
storeInRoom(item)
}
}
見た目は醜く、Javaから書き直されたコードのように見えます。
Item item = items.get(coords);
if (item != null) {
// do something with item, querying item fields a lot of times, for example
}
Javaでも見苦しいですが、少なくとも1行少なくなっています。Scalaでこのような単純なケースを処理するためのベストプラクティスは何ですか?私はすでにのコレクションを知ってflatMap
おり、処理することを知っています。また、デフォルト値を処理することも知っています。私は次のようなことを夢見ています:flatten
Option[Stuff]
getOrElse
items.get(coords).doIfDefined(item =>
// do stuff with item
)
Option
しかし、 APIにはそのようなものは見当たりません。