読者です 読者をやめる 読者になる 読者になる

garbagetown

個人の日記です

jaby

お断り

  • 駄文です
  • やや酔っています(YEBISU 500ml 缶一本、白天宝山ストレート 50ml 一杯摂取済み)
  • Java はある程度書けます
  • Ruby は書籍には目を通していますが今すぐ書けと言われても手が動きません
  • 上記の二言語以外はよく知りません

はじめに

ヽ( ・∀・)ノくまくまーの 『プログラミング言語Ruby』出版記念トーク懇親会 や yugui さんの 空セマンティクスのオーバーロード を読んでいると、Ruby 界隈の人たちは言語仕様そのものに要求を持っていて、それをアピールしている。
改めて考えてみると、自分が使う道具をもっと便利にしたいと言うことは極めて自然な衝動であるにも関わらず、Java のコミュニティには言語仕様そのものをどうにかしようというムーブメントはあまり無いように思います。
と言うことで、Java の言語仕様がこんな風に変わったらいいのにな、なんてことを妄想してみたので、いつか誰かが Java + Ruby = Jaby として実装してくれる事を無責任に祈りつつ、つらつらと書いてみます。

ijb

Javairb が欲しい。「あのクラスの使い方ってこれでいいんだっけ」とフト手が止まって、ちょこっと実験したいだけなのに、eclipse で test プロジェクトを作って test.Test クラスを作って main を書いて・・・と言うときほどメンドくさいことはない。
こんな風にしたい。JRubyirb でいいじゃん、というツッコミは受け付けない。

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> 

・・・いいのか?よくない。何も指定しなかったら ArrayList ってことで。ArrayList しか使わないし。

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 なら何でも食べちゃったから配列の方が良かったけど、今となっては配列イラネ、という気がしないでもない。
誰も読まないと思いますが、明日に続きます。寝る。