kotlin小ネタ:forEach から break っぽいことを行う
このようなコードを無理やり forEach でやろうと思った場合、
for (v in 0..1) { println(v) break }
こんな感じになる。
// forEach からの break っぽいことを行う例 fun main(args: Array<String>) { fun foo() { // label は expression に設定する必要があるので、forEach の外部に便宜的な // place holder 用の lambda expression を用意する。 run exit@ { (0..1).forEach { // 下記で forEach から抜けなければ "0", "1" と表示される。 // 実際には抜けてしまうので "0" のみが表示される。 println(it) // 外側の forEach を抜ける return@exit } } } foo() // 出力は "0" のみ }
label は expression に対して設定するので以下のようにもできる。
fun main(args: Array<String>) { val expression = exit@ { (0..1).forEach { // 下記で forEach から抜けなければ "0", "1" と表示される。 // 実際には抜けてしまうので "0" のみが表示される。 println(it) // 外側の forEach を抜ける return@exit } } fun foo() { expression() } foo() // 出力は "0" のみ }