Javaの配列リテラルで彼女ができた
タイトルはホッテントリメーカーから。何個もタイトルを作ってずっと眺めてると、リテラルがゲシュタルト崩壊おこしそうになった。
Javaに配列リテラルが無いっていうのはLL好きにとっては格好のネタらしくて、まつもとさんの集中講義でも「Javaで書くとこんなに長いプログラムが、Rubyだとこんなに短かくなりました」みたいなデモンストレーションでも「配列リテラルを導入すると……」みたいなくだりがあったように覚えている。まあ、そんなのどうでも良いんだけど、さっきid:kmizushimaと話していてその理由に思い至ったので書く。
int[] a = [1,2,3];
みたいに書けるべきだというのは、確かにそんな気もするんだけど、空の配列だと困ったことになる。
Object a = [1,2,3];
は良い。aに代入されたオブジェクトの型はintの配列だ。これが、
Object a = [];
だと、その式の型がよくわからないことになる。なんかの配列なことはわかるんだけど、その要素の型はわからない。こういうのを避けるために、Javaは
Object a = new int[] {};
とか書かなくちゃいけないのかもしれない。いや理由かどうかはわからないけど、まあ、こういう問題があるかも、ってことで。
ちなみにMLだとこういう問題は発生しない。
let a = []
は、任意の'a型のリストだし、
let a = ref []
は、なにか'_a型のリストへのリファレンスで、'_aが何かは後で型推論によって決まる。