2009/01/28

配列リテラルの記述が、カンマが一個多くても正常に動作するよ

いつものことですが、人のソースを見ているととても勉強になる。

作業予定表から週単位で作業量を積み上げる Groovyで どう書く?org

をのんびり見ているときのこと。

以下のようなソースの記述を見つけ、「あれ?カンマ一個多いな。」と思った。

// ワークプランリスト
def workPlanList = [
   new Plan(date:'2009/1/10', days: 21, mark:'#'),
   new Plan(date:'2009/1/15', days:  6, mark:'@'),
   new Plan(date:'2009/1/10', days:  8, mark:'*'),
   new Plan(date:'2009/1/16', days:  1, mark:'='),
   new Plan(date:'2009/1/16', days:  3, mark:'%'),
   new Plan(date:'2009/1/30', days:  4, mark:'='),
]

しかし、不思議なことに、これは正常に動作する。

もしやと思って以下のコードを実行してみると・・・

println([1, 2, 3, 4, 5, ])
println([1, 2, 3, 4, 5, ].size())

>> [1, 2, 3, 4, 5, ]

>> 5

あら、正常に動作した。最後のカンマは無視されるのかな?でも以下のようなコードはカンマが全行にあったほうがコーディングしやすい(マクロとか使うとき楽だし、こぴぺもしやすい)

def list = [
    "たろう",
    "はなこ",
    "さぶろう",
    "しろう",
]

面白い。

2 件のコメント:

  1. どうも、fumokmmです。

    これ、Javaでも正当な構文ですよね。
    配列の宣言時にはカンマが多くてもOKなんですが、メソッド呼び出しの時は多いと怒られます(コンパイルエラーになります)。

    しかし、Groovyだとメソッド呼び出し時でもこの構文が使えました。さすがGroovy。

    返信削除
  2. >fumokmmさん
    ありがとうございます。
    Javaでも正当な構文なんですか、また知らなかった…
    Javaも知らないこと多いな、自分。

    返信削除