最終更新: ksuzuki_323 2011年10月02日(日) 17:52:35履歴
- java.lang.*
- java.io.*
- java.net.*
- java.util.*
- groovy.lang.*
- groovy.util.*
- java.math.BigDedimal
- java.math.BigInteger
- 見た目上はクラスに所属しないコード
- クラス定義やmainメソッドの定義を記述することなしに、groovyコマンドで実行できる
- 内部的に生成されたクラス定義に所属するメソッドにコンパイルされて実行される
- スクリプトが「hoge.groovy」というファイルとして保存されている場合、「groovy hoge.groovy」で実行可能
- スクリプトの1行目を「#!」で始めることで、UNIX環境ではGroovyスクリプトを実際にスクリプトとして実行することができる
#!/usr/loacl/bin/groovy
- Mac OS Xの場合はenvコマンドを経由してgroovyコマンドを指定する(「#!/usr/bin/env groovy」のように指定する)
- Windowsでは、PATHEXT環境変数を設定することで、groovyスクリプトをコマンドとして実行可能
- スクリプトで使用する特別な変数
- 変数の宣言をしない
- 型を指定することができず、常にObject型
- 型を指定しないことを意味するdefを指定することもできない
- スクリプト中でメソッドを定義したときに、メソッドの中からメソッドの外にあるバインディング変数を参照できる
- mainメソッドを定義しているクラス
- jUnit3、4やTestNGのテストケース、もしくはGroovyTestCaseを継承したクラス
- Runnableをimplementsしたクラス
- クラスやメンバのアクセス修飾のデフォルトはpublic
- 現在のGroovyではprivateやprotectedのアクセス指定がなされたフィールドやメソッドに対しても、アクセス制限が無視されpublic扱いでアクセスすることができる(公式にはバグとして登録されている)
- 実引数に名前を付け、その名前に基づいて参照することができる機能
- 引数の順序を気にせずに、順不同で引数を与えることができる
- Groovyでは、マップで引数をやり取りすることで名前付き引数を実現
- 具体的には、メソッド定義側では、マップで引数を受け取るようにし、呼び出し側では、引数を「名前:値」をカンマで区切って与えてメソッドを呼び出す
def hoge(Map param) { println "${param.author}著 「${param.title}」価格${param.price}円" } hoge(title:"普通の本", author:"さとうたろう", price:1000)
- コンストラクタについても、名前付き引数の指定の形式でコンストラクタを呼び出すと、引数の名前を持つメンバをその引数の値で初期化してくれる(ただし、引数のないコンストラクタだけが定義されている場合のみ。引数を取るコンストラクタを1つでも明示的に定義すると、名前付き引数によるコンストラクタは自動的には利用できない)
- Groovyではメソッド呼び出しが式文としてのトップレベルにあり、引数が1個以上の場合、カッコを省略できる(これを「コマンド式」と呼ぶ)
- 1.8からは、さらに拡張された「拡張コマンド式」が利用可能に
- Groovyには文字列リテラルの表現の方法が6種類ある
- Groovyはchar型のリテラルの記法がない。シングルクォートで括った場合でもString型の文字列リテラルになる
- ダブルクォートとシングルクォートの違いは、GStringの展開がされるかどうか
- GStringとは「$変数名」あるいは「${式}」を含む文字列リテラルであり、ダブルクォートで括った場合は、これらの形式が変数の値や式に置換される
- Groovyでは、接尾辞を指定しない浮動小数リテラルの型はBigDecimalとなる
接尾辞 | 型 |
I/i | Integer |
L/l | Long |
F/f | Float |
D/d | Double |
G/g | BinInteger/BigDecimal |
- クロージャ:「生成時のコンテキストを含んだコードブロック」「状態を持った関数」
- クロージャに含まれているコードを実行するには、call()メソッドを呼び出す。call()を省略してメソッド呼び出しと同じ表現でも呼び出すことができる。
- クロージャには引数を与えることができ、クロージャのブロック先頭に「->」を使って区切って仮引数を指定する。
- 実引数はcallの引数として与えたり、メソッド呼び出しと同様に与えることができる。
- 引数リストを書かないと暗黙の引数「it」を1つ取るクロージャであると見なされる。
- 引数を取らないクロージャを表現するには、クロージャの冒頭の「{」の直後に仮引数リストを書かないで「->」を指定する。
Closure clos = { -> println "引数とらない" }
- メソッドの最後の引数がクロージャである場合にはメソッド呼び出しの括弧の直後にクロージャを書くことができる。
collectionに格納されている値から奇数のものだけ取得。findAllメソッドはクロージャを引数にとる。 def result = collection.findAll{ it % 2 == 1 }
最新コメント