Master_Sergius написав:Тобто, це виходить ніби:
var config = parser.parse(args, Config())
if (config) // do stuff
else // arguments are bad
ось так воно чи шо?
та шоб таких розробників мови в туалет пускали лише опісля видачі робочого коду
Не поспішайте з висновками. Якщо говорити про клас Option, то на перший погляд він надлишковий: там, де Some(value), можна повернути просто value, а там, де None, повертати null. Проте сам факт того, що функція повертає Option, вимагає від програміста обробити обидві ситуації. Це схоже на звичайні джавівські Exception`и, але Exception - це виняткова ситуація, яка забирає багато ресурсів, в той час як None може бути використаний і для штатної ситуації.
Крім того, бувають і складніші case-класи. Наприклад, клас, що представляє гральні карти:
abstract class Card
case class Joker extends Card
case class Higher(suit: Suit, value: String)
case class Lower(suit: Suit, value: Int)
Порівняння з шаблоном такого класу виглядатиме досить просто:
card match{
case Joker => //
case Higher(suit, stringValue) => //
case Lower(suit, intValue) => //
тоді як коректний ланцюжок if-else-... мені важко уявити сходу.