まだ開発中のこの言語の特徴は副作用の型化。プログラミングの世界で、関数内で発生する画面表示などは副作用と呼ばれますが、Kokaではそれを型として明示します。
「The Koka Programming Language」
「効果」と日本語表記が目立ちますね!
サクッと brew で Koka をインストール
brew install koka
例えば、こちら割り算する関数を呼び出すKokaのプログラム
fun div(x: int, y: int): int { x / y } fun main() { div(10, 3).println }
funは関数、型はTypeScript風で後置、returnは省略可。test.kkとして保存し
koka -e test.kk
として、コンパイル&実行。
関数divに、デバッグ出力を追加してみます。
fun div(x: int, y: int): int { y.println x / y }
すると、コンパイル時にエラー
error: effects do not match
関数の型に、<console> を追加すると
fun div(x: int, y: int): <console> int { y.println x / y }
コンパイル&実行、再びできるようになりました。例外が発生する場合は <exn> を使い、コンソール出力と例外、両方発生する場合は下記のように両方指定します
fun div(x: int, y: int): <console, exn> int { y.println if (y == 0) { throw("divide by zero!") } x / y }
使ってみたくなりました?自分のよく使う言語のGeo3x3実装と、Kokaでの実装「geo3x3.kk」、見比べてセルフ相性診断してみましょう!
プログラム内でのブロックの書き方は、Geo3x3の実装のようにPython風インデントで書いても、本ブログのように波カッコとセミコロンを使ったJavaScript風に書いてもいいハイブリッド型。
どちらの流派の人にも入りやすい!