値が Some(...) の場合に副作用を実行し、値が None の場合に別の副作用を実行する最も慣用的な方法は何ですか。私が現在書きがちなことは次のとおりです。
def doSideEffectA(value: Int) {
// ...
}
def doSideEffectB() {
// ...
}
def doSideEffect(valueOption: Option[Int]) {
valueOption map { value =>
doSideEffectA(value)
} getOrElse {
doSideEffectB()
}
}
私の問題は、valueOption が None の場合に何もする必要がない場合、次のように書くことです。
def doSideEffectNothingIfNone(valueOption: Option[Int]) {
valueOption foreach { value =>
doSideEffectA(value)
}
}
map/getOrElse は通常、副作用のコンテキストでは使用されませんが、foreach は使用されます。ValueOption map { ... } getOrElse { ... } が Unit を返すことにあまり慣れていません。Option[Int] から何も「取得」しないからです。