scala3/boundary/break使いどころ
Booleanを返すメソッドがたまにある
実際にBooleanが欲しいとき
isEmptyみたいな
または、副作用を目的としたメソッドで、その成否を知りたいとき
今回はこっち
code:scala
def createUsers(infos: SeqUserDTO): Boolean =
val 必要な情報1 = infos.collect:
case Foo(...) => ???
val 必要な情報2 = infos.collect:
case Bar(...) => ???
val 必要な情報3 = infos.collect:
case Buzz(...) => ???
val count = saveToDB(???)
count == infos.size
ここで必要な情報はcollectで集めているが、その内部で込み入ったことをする
code:scala
val 必要な情報1 = infos.collect:
case Foo(body) => body match
case None => None
case Some(lis) =>
val foo = createFoo(lis) // => OptionA
// Noneのときだけ計算は中止する。大域脱出の副作用を発生させたい
foo.map(Some.apply).getOrElse(return false)
何かがNoneだったら脱出させたい
まずはgetOrElseではなくorElseに展開できる
code:scala
foo.orElse(return false /* expected OptionA, but returns Nothing */)
雑談: empty版のforeachが欲しいよね
素直にisEmptyでもいい
code:scala
if foo.isEmpty then return false else foo
ところで、returnはメソッドまで脱出してしまう。そこまで大きく脱出しなくていいならScala 3から入ったboundary/breakを利用できる
boundary