Skip to end of metadata
Go to start of metadata


GroovyはCollection、List、Map、配列を言語として最初からサポートしています。

List


Listは次のように作成できます。[]は空のListを表します。


どのList表現も、java.util.Listの実装を生成します。

Range(範囲)


Rangeによって連続した値のListを作ることができます。

Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
java.util.Listを継承しているので、Listとして扱えます。
_.._と書いたRangeは端点を含みます。(開始値と終了値を含むListです)
_..<と書いたRangeは端点を含みません。最初の値は含みますが、最後の値は含みません。


補足ですが、Rangeを効率よく実装するため、生成するJavaオブジェクトは開始値、終了値を含んだ簡単なものになっています。
比較のためにjava.lang.Comparableを実装するJavaオブジェクトならどれでもRangeで扱うことができ、Range中の次の項目や前の項目を返すためのnext() や previous()も持っています。
例をいうと、RangeにはStringを使うことが出来ます。


Rangeはfor文を使った繰り返しにも使えます。

Map


Mapは次のような構文を使って生成します。[:]は空のMapを表します。
Mapのキーはデフォルトでは文字列です。[a:1]は ["a":1]と同価です。もし本当にキーに変数として使用したいなら、 [(a):1]のように括弧で括る必要があります。


Mapはbeanのように振る舞うので、キーが有効なGroovy識別子であれる文字列であれば項目のget/setのためにプロパティ表記を使うことが出来ます。


注意:map.fooは常にMapのfooキーを探すようにデザインされています。これは、空のMapの場合、foo.classはnullが返えるということであり、getClass()メソッドの呼び出した結果ではないことを意味します。

アスタリスク-ドット演算子(*.)で効率的な操作


'*.'演算子を使うことでコレクションのすべてのメンバーに対して操作を実行できます。例えば次のような感じです。

配列要素演算子による取り出し


添え字表現を使うことで文字列、List、配列、Map、正規表現やそのようなものにインデックスをつけることが出来ます。


List/配列/文字列/正規表現から一部を取り出すためにRangeを使うこともできます。Pythonのようなスクリプト言語で_slicing_と呼ばれるものです。Listのインデックスも使えます。


項目の更新にも添え字表現が使えます。


List、配列、文字列などを後ろから数えるために負の添え字が使えます。


また、逆方向のRange(開始の添え字が終わりの添え字より大きい場合)を使うと、逆に並んだものが返ります。

動的なオブジェクト (Expandos)


Expandoは厳密に言うとCollectionではありませんが、あらかじめプロパティを定義しておく必要がないJavaScriptでは、Mapやオブジェクトと同じ追うな使われ方をされます。
Groovyのクロージャの仕組みを使うことで動的オブジェクトを作成することができます。オブジェクトに対して呼び出すことができる合成メソッドを提供するという点で、ExpandoはMapと異なります。


player.greetingと指定すると、Expandoに対してgreeting()が呼ばれたときに実行するクロージャを渡すことになります。
クロージャはGroovyのGString表記 "$変数orプロパティ"を使ってExpandoに割り当てられたプロパティにアクセスします。(ただし、これらの値はいずれ変わるかもしれません)

  • No labels