1. TOPTOP
  2. Webサービス
  3. CakePHP

配列の最後の要素で”,”(コンマ)がつく理由。CakePHPでは分からなかったことが明解Java入門編で分かった!

mvc0

CakePHPのドキュメンテーションで、こんなコードを見ることがあります。

public function setup(Model $Model, $settings = array()) {
    if (!isset($this->settings[$Model->alias])) {
        $this->settings[$Model->alias] = array(
            'option1_key' => 'option1_default_value',
            'option2_key' => 'option2_default_value',
            'option3_key' => 'option3_default_value',
        );
    }
    $this->settings[$Model->alias] = array_merge(
        $this->settings[$Model->alias], (array)$settings);
}

これはビヘイビアのうちでも、独自のビヘイビアの作成から引用したものです。注目したいのは、6行目にある配列の最後の要素です。

この要素をよく見ると、“,”(コンマ)が打たれています。なんでわざわざこんな書き方をするのでしょうか?

ずーっと不思議に思っていましたが、昨日、明解Java入門編を読んでハタと気が付きました。

配列の最後の要素にコンマをつける理由

読んでいてとてもすっきりしたので、引用(P.216)とは思いつつも書き残しておきましょう。例として、次の2次元配列が用いられています。

int [] a = {
	{1, 2, 3}, // 0行目の要素に対する初期化子
	{4, 5, 6}, // 1行目の要素に対する初期化子
};

理由1.バランスが取れる

最後の行を含め、すべての行の最後の文字がコンマとなりますので、見かけ上のバランスがとれ、美しくなります。

理由2. 追加・削除が容易になる

たとえば、以下のように行が追加されたときにコンマ文字を付け忘れるミスを防ぐことができます。

int [] a = {
	{1, 2, 3}, // 0行目の要素に対する初期化子
	{4, 5, 6}, // 1行目の要素に対する初期化子
	{7, 8, 9}, // 2行目の要素に対する初期化子	
};

2次元だけでなく1次元配列でもコンマが使える

例のコードでは、2次元配列で説明されていますが、冒頭のCakePHPのコードのように、1次元配列でも「余分なコンマ」を付けることができます。

int d[3] = {1, 2, 3, };

自分が見た限りでは、CakePHPやPHPのテキストやドキュメンテーションでは理由を探しあてることができなかったので、非常に助かりました。

〔参考サイト〕