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

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が何かは後で型推論によって決まる。

Rubyで配列リテラルが書けるのは、型無しの言語だから。MLでリストリテラルが書けるのは、型推論があるから。