リテラル
- 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)
- 未実装。
- サブタイピングはオプショナルにしたい
ほとんどメモ書きですが…。