Groovy-closures
Groovy-クロージャー
クロージャーは、コードの短い匿名ブロックです。 通常は数行のコードにまたがります。 メソッドは、コードのブロックをパラメーターとして受け取ることもできます。 それらは本質的に匿名です。
以下は、単純なクロージャーの例とその外観です。
上記の例では、コード行-\ {println "Hello World"}はクロージャーとして知られています。 この識別子によって参照されるコードブロックは、callステートメントで実行できます。
上記のプログラムを実行すると、次の結果が得られます-
クロージャーの正式なパラメーター
クロージャーには、Groovyのメソッドと同じように、より便利にするための正式なパラメーターを含めることもできます。
上記のコード例では、クロージャーがパラメーターを取得する$ \ {param}の使用に注意してください。 clos.callステートメントを介してクロージャーを呼び出す場合、クロージャーにパラメーターを渡すオプションがあります。
上記のプログラムを実行すると、次の結果が得られます-
次の図は、前の例を繰り返して同じ結果を生成しますが、参照できる暗黙の単一パラメーターを使用できることを示しています。 ここで「それ」はGroovyのキーワードです。
上記のプログラムを実行すると、次の結果が得られます-
クロージャーと変数
より正式には、クロージャーは、クロージャーが定義されるときに変数を参照できます。 以下は、これを実現する方法の例です。
上記の例では、クロージャーにパラメーターを渡すことに加えて、str1という変数も定義しています。 クロージャは、パラメータとともに変数も取ります。
上記のプログラムを実行すると、次の結果が得られます-
メソッドでクロージャーを使用する
クロージャーはメソッドのパラメーターとしても使用できます。 Groovyでは、リストやコレクションなどのデータ型の多くの組み込みメソッドには、パラメーター型としてクロージャーがあります。
次の例は、クロージャーをパラメーターとしてメソッドに送信する方法を示しています。
上記の例では、
- 引数としてクロージャーを受け取るDisplayという静的メソッドを定義しています。
- 次に、メインメソッドでクロージャーを定義し、パラメーターとしてDisplayメソッドに渡します。
上記のプログラムを実行すると、次の結果が得られます-
コレクションと文字列のクロージャー
いくつかのList、Map、およびStringメソッドは、引数としてクロージャを受け入れます。 これらのデータ型でクロージャーを使用する方法の例を見てみましょう。
リストでクロージャを使用する
次の例は、クロージャーをリストで使用する方法を示しています。 次の例では、最初に値の単純なリストを定義しています。 リストコレクションタイプは、。 each という関数を定義します。 この関数は、パラメーターとしてクロージャーを取り、リストの各要素にクロージャーを適用します。
上記のプログラムを実行すると、次の結果が得られます-
マップでクロージャを使用する
次の例は、マップでクロージャーを使用する方法を示しています。 次の例では、最初にキー値アイテムの単純なマップを定義しています。 次に、マップコレクションタイプは.eachという関数を定義します。 この関数は、パラメーターとしてクロージャーを受け取り、マップの各キーと値のペアにクロージャーを適用します。
上記のプログラムを実行すると、次の結果が得られます-
多くの場合、コレクションのメンバー全体を反復処理し、要素が何らかの基準を満たしている場合にのみ何らかのロジックを適用したい場合があります。 これは、クロージャーの条件ステートメントで簡単に処理できます。
上記の例は、リスト内の各項目が2で割り切れるかどうかを確認するために使用されるクロージャーで使用される条件付きif(num%2 == 0)式を示しています。
上記のプログラムを実行すると、次の結果が得られます-
クロージャーで使用されるメソッド
クロージャー自体がいくつかのメソッドを提供します。
Sr.No. | Methods & Description |
---|---|
1 |
findメソッドは、コレクションにある基準に一致する最初の値を見つけます。 |
2 |
クローズ条件に一致する受信オブジェクト内のすべての値を検索します。 |
3 |
メソッドanyは、ブール述語が少なくとも1つの要素に対して有効かどうかを確認するコレクションの各要素を反復処理します。 |
4 |
メソッドcollectはコレクションを反復処理し、クロージャーをトランスフォーマーとして使用して各要素を新しい値に変換します。 |