Klassic言語の開発状況
リテラル
- Byte
- Short
- Int
- Long
- Float
- Double
- Boolean
- Unit
- String
演算
加減乗除、比較、論理演算、などなど。異なる数値型の暗黙変換は禁止(Int + LongなどはNG)
リスト
[ [1 2 3] [4 5 6] [7 8 9] ]
こんな風に、改行だけでなく空白がセパレータになることもできる(実験的文法)。
無名関数
val add = (x, y) => x + y
関数定義
def add(x, y) = x + y
while式
while(condition) expression
foreach式
- 今のところ
iterator()
メソッドを持っているオブジェクトすべてに適用できる
foreach(var in expression) expression
if式
if(condition) thenClause else elseClause
ヒアドキュメント
println("#{<<TAG1 + 1} #{<<TAG2 + 2} #{<<TAG3 + 3}") tag1 TAG1 tag2 TAG2 tag3 TAG3
ヒア式
- ヒアドキュメント実装の副産物として生まれた
println(<<$EXP1 * <<$EXP2); //(1 + 2) * (3 + 4) → 21 1 + 2 EXP1 3 + 4 EXP2
String Interpolation
${}
じゃなくて#{}
な辺りはRuby風味。
val x = 10 val y = 20 println("x = #{x}, y = #{y}") println("x + y = #{x + y}")
オブジェクト生成とかメソッド呼び出しとかJava FFIとか
val list = new java.util.ArrayList list.add(1) list.add(2) println(list) val buffer = new java.lang.StringBuffer buffer.append("A").append("B").append("C") println(buffer) println([ "FOO" "BAR" "BAZ" ]) println("FOO".substring(0, 1))
型チェック
- 実装始めたばっかり
- ごく基本的な型チェックが動く
- 一応簡単な型推論もある
{ val i = 1; i } // 型はInt
val a = 1 val b: Long = a //NG。IntからLongへの暗黙変換は許されない b
クラスシステム(Klass
System)
- 未実装。
- サブタイピングはオプショナルにしたい
ほとんどメモ書きですが…。