Kokaの特徴的な文法
Dot selection
オブジェクト指向みたくo.f(42).g("piyopiyo")と書けるが、ここでのドットはoのメソッドを呼んでいるのではなく、f(o, 42)の構文糖衣になっている。
全部ほどくとg(f(o, 42), "piyopiyo")。
Trailing lambda
ラムダ式を関数引数に渡すとき、それを括弧の外に書ける。
例:
code:koka
for(1, 10, fn(i) { println(i) })
これを
code:koka
for(1, 10) fn(i) {
println(i)
}
こう書ける。
引数を受け取らないならfn()も省略できる。
code:koka
while { i >= 0 } { i := i - 1 }
Rubyのブロック引数みたいな感じ。
With statement
継続っぽいのを たいら に書ける構文。
code:koka
fun run-twice(f) {
f()
f()
}
っていう関数があったとして、run-twice $ run-twice $ f みたいなことがしたくなったとき、
code:koka
fun print-four-times() {
with twice
with twice
println("Hello")
}
と書くと
code:koka
fun print-four-times() {
twice(fn() {
twice(fn() {
println("Hello")
})
})
}
と同様の動き方をする。
effect handlerと一緒に使うと便利。