💨
KotlinのFizzBuzz問題(多分これが一番美しいと思います)
(1..100).forEach { i ->
val str = when (Pair(i % 3 == 0, i % 5 == 0)) {
Pair(false, false) -> i
Pair(true, false) -> "Fizz"
Pair(false, true) -> "Buzz"
else -> "FizzBuzz"
}
println(str)
}
もしくは
(1..100).asSequence().map { i ->
when (Pair(i % 3 == 0, i % 5 == 0)) {
Pair(false, false) -> i
Pair(true, false) -> "Fizz"
Pair(false, true) -> "Buzz"
else -> "FizzBuzz"
}
}.forEach(::println)
asSequence()
でLazy evaluationが可能となり、1要素毎にprintlnしてくれます。
もしasSequence()
を付けずに実装してしまうと、(1..1000000000)
のような巨大なループにした場合にEager evaluationな実装となってしまい、1000000000回mapのループを実装した後にまとめてprintlnしようとするためjava.lang.OutOfMemoryError
となってしまいます。
Discussion