jaby
お断り
はじめに
ヽ( ・∀・)ノくまくまーの 『プログラミング言語Ruby』出版記念トーク懇親会 や yugui さんの 空セマンティクスのオーバーロード を読んでいると、Ruby 界隈の人たちは言語仕様そのものに要求を持っていて、それをアピールしている。
改めて考えてみると、自分が使う道具をもっと便利にしたいと言うことは極めて自然な衝動であるにも関わらず、Java のコミュニティには言語仕様そのものをどうにかしようというムーブメントはあまり無いように思います。
と言うことで、Java の言語仕様がこんな風に変わったらいいのにな、なんてことを妄想してみたので、いつか誰かが Java + Ruby = Jaby として実装してくれる事を無責任に祈りつつ、つらつらと書いてみます。
ijb
Java 版 irb が欲しい。「あのクラスの使い方ってこれでいいんだっけ」とフト手が止まって、ちょこっと実験したいだけなのに、eclipse で test プロジェクトを作って test.Test クラスを作って main を書いて・・・と言うときほどメンドくさいことはない。
こんな風にしたい。JRuby の irb でいいじゃん、というツッコミは受け付けない。
ijb(main):001:0> String[] arr = {"a", "b", "c"}; => [Ljava.lang.String;@ca0b6 ijb(main):002:0> for (String s : arr) { System.out.println(s) }; a b c => null ijb(main):003:0>
Java の文法に慣れ親しんだ身としては、コードの途中で import 文が出てくるとややキモいので、java.lang パッケージ以外のクラスは完全修飾名で書くのかもしれない。
ijb(main):001:0> java.util.List<String> list = new java.util.ArrayList<String>(); => [] ijb(main):002:0> list.add("a"); => ["a"] ijb(main):003:0> list.add("b"); => ["a", "b"] ijb(main):004:0> list.add("c"); => ["a", "b", "c"] ijb(main):005:0>
・・・メンドくさいな。もうそろそろ java.util パッケージは import 無しで使えていいよ。
List
List のシンタックスシュガーが死ぬほど欲しい。{} は配列で使っているから [] だよね。
上述の ijb、および java.util パッケージの import 無し化と併せると
ijb(main):001:0> List<String> list = ["a", "b", "c"]; => ["a", "b", "c"] ijb(main):002:0>
みたいな感じ。具象クラスが決まらなくてダメだっつーんならこれでもいいよ。
ijb(main):001:0> List<String> list = new ArrayList<String>(["a", "b", "c"]); => ["a", "b", "c"] ijb(main):002:0>
Map
Map のシンタックスシュガーも死ぬほど欲しい。{} は配列で使っていて [] は List だとすると、<> とか?キーと値の指定は Ruby と同じでいいと思う。デフォルト具象クラスは HashMap で。
ijb(main):001:0> Map<String, Integer> map = <"a" => 1, "b" => 2, "c" => 3>; => {a=1, b=2, c=3} ijb(main):002:0>
・・・キモい。やっぱり Map は {} だよなあ。
ijb(main):001:0> Map<String, Integer> map = {"a" => 1, "b" => 2, "c" => 3}; => {a=1, b=2, c=3} ijb(main):002:0>
うん。落ち着く。じゃあ配列が [] で List が <> か。toString() も分かりやすくして
ijb(main):001:0> String[] arr = ["a", "b", "c"]; => ["a", "b", "c"] ijb(main):002:0> List<String> list = <"a", "b", "c">; => <"a", "b", "c">
Generics の記号と被っていてやや微妙だけど許容範囲内かな。そもそも配列と List の区別って必要なんだろうか。Tiger 以前のバカ List は Object なら何でも食べちゃったから配列の方が良かったけど、今となっては配列イラネ、という気がしないでもない。
誰も読まないと思いますが、明日に続きます。寝る。