#以下はC言語、C++言語、C#言語、風に書いてますが、たぶんどの言語もほとんど言えることかなと思っている。
2次元配列を平面とみなして表現する場合の添え字は
matrix[x][y]
となっていると直感的にも数学的に理解しやすい。しかしコンピュータの世界では、ほとんどの場合
matrix[y][x]
と表現せざるを得ない。たとえばそれでも無理やりに
matrix[x][y]
でコード上推し進めても問題は起こらないように思う。しかし困るのが2次元配列を初期化をともなう場合。
byte[][] matrix = new byte[][]{
new byte[]{ 0, 0, 0, 0, 0 },
new byte[]{ 0, 1, 2, 3, 0 },
new byte[]{ 0, 4, 5, 6, 0 },
new byte[]{ 0, 7, 8, 9, 0 },
new byte[]{ 0,10,11,12, 0 },
new byte[]{ 0, 0, 0, 0, 0 },
};
こう書きたい。こう書いた人の”意図”というのは見た目横方向がxなのだろう。そうなるとアクセスはmatrix[y][x]にしなくてはならなくなってしまう。
こうなってしまった元をたどると2次元配列を「配列の配列」で表現しはじめた事に行き着く。
はじめに1次元配列があった。
array[x]
と表現する。これはX方向1ライン分表現している。これはこれで良いと思う。
その1次元配列がさらに配列になった。
array[x][y]
と出来なかったのはどうしてだったんだろう。もし”どっちでもよかったけどなんとなく”みたいな理由だったらやだなあ。きっと何か特別理由があったんだろう。
でも、たとえば「関数が関数のアドレスを返す」ような場合、この戻ってきたアドレスを呼び出すときには
func()()
という風に書くがこのばあいは右の方の()が後から呼び出される。右へ右へと結合ができる。()は右なのだ。
だから[]が右へ伸びるようにしてくれてても良かったように思っている。
(22時11分記事訂正[,]と[][]が混在してたので[][]に統一しました。)