List.mapが型チェックをするようになりました。
List.mapが型チェックをするようになりました。
l: List<String> = list { 1, 2, 3 }.map() {|n:Integer| return n.toString(); }
はコンパイルできます。
これまで通りのAnonymousを返すコードもそのまま動きます。
一応互換性がある変更点です。
KotlinのList.mapの定義の美しさにびっくりして、一時期電車の中で定義をプリントアウトした紙を眺め続けて、うっとりしていました。
ようやく、Clover2でも同じものが手に入りました。
良かったら、使ってください。
定義はContainer.clcにあるので見てくださいね。まあ、単純な実装です。
それでは、enojoy programing!
LLVMのリファクタリングが一応終了
ちょっとは読みやすくなったかと。
ついでにlist { 1, 2, 3 }.toString().println();がJITでは動かなかったですが、デバッグしています。
これでようやくKotlinに近づけるコーディングを始められます。
今のところ考えているのは
1. List.mapのためにクラスのメソッドのにクラス引数を渡せるようにしたいこと。(今はクラス単位でしか渡せない。その為List.mapの定義がAnonymousを使っているため煩雑になっている。)
class List<T>
{
def <T, R> map(trans:lambda(T):R): List<R>
}
などと定義したい。
2. メソッドのラムダ引数の省略。Kotlinでいうit, it2ってやつです。
3.times() { it.toString().println(); }
などと使えるようにしたい。
3. new 演算子の省略
a := List([ 1, 2, 3 ])
でlist { 1, 2, 3 }の代りに使えるようにする。list { 1, 2, 3 }自体は残しておきます。
4.型推論の強化
Kotlinのようにブロックを含むメソッドチェインをしたときに簡単な記述で書けるようにしたい。
点です。とりあえず、1から始めます。KotlinのList.mapの定義の綺麗さに感動しました。当たり前のことを当たり前のようにしているKotlinは素晴らしいです。普通なんですよね。なんか全てが。
ようやく、今日から新しいことができます。List.mapの定義がKotlinっぽくなるのが楽しみです。
それではenjoy progmirang!
言語仕様の変更点
ブロックが block { a := 123 } などから { a := 123 } に変更されています。ブロックは戻り値を返すようになりました。最後に実行された式の値がブロックの戻り値です。a := { 123 }; System.assert(a == 123)は真です。
ブロックの表記が変わったので配列の表記が変わってます。 { 1, 2, 3 }から[ 1, 2, 3 ]となっています。リストなどはlist { 1, 2, 3 }から変わっていません。
if文が戻り値を返すようになりました。a := if(true) { 123}; System.assert( a == 123 )は真です。
変更申し訳ないです。Kotlinが気に入ってましてClover2をKotlinの言語仕様に近づけるため、これからもしばらく言語仕様の変更があると思います。Kotlinのような表記ができるようになったら、version 5.0としてリリースして言語仕様を固定したいと思います。申し訳ないです。
if文が戻り値を返すようになってます。
if文が戻り値を返すようになってます。JIT対応。
> a := if(true) { 1 } else { 2 }
> a
1
となります。JITでも対応しています。
もちろん、インタプリタでは
> if(true) { "ABC" } else { "DEF" }.[TAB]
でString型のメソッド補完も行います。
次はブロックでの引数の省略を入れたいと思います。itってやつですね。ブロックの引数が複数あったら、it, it2, it3とかできれば良いなと思います。ただ、Clover2はブロックの引数の型が決まっていないとメソッド探索ができないかもしれないので、ちょっとむずかしいかもしれません。もちろん探せるように修正はできるので、なんとか、Kotlinのようにブロックの引数が省略できるようにしたいです。
それとreturn文が省略できるようにすればかなり、メソッドチェインでKotlinのような記述ができるようになると思います。
型推論辺りも強化しないとList.mapはKotlinのようにはならないと思いますが。
まあ、ぼちぼちKotlinのような簡略化した記述ができるように修正していきたいと思います。
しかし、今日は夜更かししてしまいました。
明日仕事中、眠いと思います。がくり。仕事に支障が無いようにぼちぼちコーディングしたいと思います。バグが出るとついムキになっちゃいますね。
反省。
明日は早く寝ると思います。
おやすみなさい。
それでは。