Jako Java do Scala Switcher, ja rutynowo znaleźć się przepisywanie zerowej manipulacyjną rzeczy jakScala najlepsze praktyki: prosta opcja [] Użycie
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)
}
}
myślę, że wygląda brzydko i naprawdę wygląda jak fragment kodu przepisany z Javy:
Item item = items.get(coords);
if (item != null) {
// do something with item, querying item fields a lot of times, for example
}
Wygląda też paskudnie w Javie, ale przynajmniej jest o jedną linię mniej. Jaka jest najlepsza praktyka radzenia sobie z tak prostymi przypadkami w Scali? Już wiem o flatMap
i flatten
do obsługi kolekcji Option[Stuff]
i znam getOrElse
do obsługi wartości domyślnych. Marzę o czymś takim:
items.get(coords).doIfDefined(item =>
// do stuff with item
)
ale nie widzę nic takiego w Option
API.
To może pomóc: http://dibblego.wordpress.com/2008/01/16/scalaoption-cheat-sheet/ – dhg