(Translated by https://www.hiragana.jp/)
Groovy - Wikipedia コンテンツにスキップ

Groovy

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

これはこのページの過去かこはんです。Jun (会話かいわ | 投稿とうこう記録きろく) による 2004ねん8がつ31にち (火) 19:03個人こじん設定せってい設定せっていならUTC時点じてんはん (機能きのう特徴とくちょう)であり、現在げんざいはんとはおおきくことなる場合ばあいがあります。

Groovyグルービー)は、JVM(Java Virtual Machine)じょう動作どうさするスクリプト言語げんごである。

Groovyの処理しょりけいオープンソースソフトウェアであり、James Starachanらを中心ちゅうしんに、 オープンソース開発かいはつサイトであるcodehausうえでBSD/Apacheライクなライセンスにて開発かいはつ公開こうかいされている。 Groovyは2003ねん8がつ27にち開発かいはつ開始かいしされた(CVSへの最初さいしょのコミットがなされた)。

概要がいよう

GroovyはJVMじょう動作どうさする言語げんご処理しょりけいおよび言語げんご名称めいしょうであり、Javaとの直接的ちょくせつてき連携れんけい特徴とくちょうとする。 たとえばGroovyからすべてのJ2SE APIや、Javaでかれた任意にんいのサードパーティせいのコンパイルみのライブラリなどをすことができる。 言語げんご記述きじゅつ能力のうりょくとしては、Javaで記述きじゅつできることは、 (無名むめい内部ないぶクラスの定義ていぎなど一部いちぶ例外れいがいのぞき)基本きほんてきにGroovyでも記述きじゅつすることができる (ぎゃくうとJavaで記述きじゅつできない機能きのう記述きじゅつできないがJavaと同様どうようC言語げんごなどでかれたネイティブメソッドなどはすことができる)。

Groovyは動的どうてき言語げんごであり、直接ちょくせつスクリプトを実行じっこうすることができる。Groovyコード断片だんぺんをコマンドラインにあたワンライナーとして実行じっこうすることも可能かのうである。 なおこのとき中間ちゅうかんてきにJavaソースコードが生成せいせいされることはなく、 バイトコードがメモリじょう生成せいせいされて直接ちょくせつ実行じっこうされる。 また、groovycコマンド(groovyコンパイラ)を使つかってクラスファイルをあらかじめ生成せいせいしておくこともできる。 いずれにせよGroovyコードは内部ないぶてきにはJavaバイトコードに変換へんかんされてJVMじょう実行じっこうされる。

このとき、GroovyコードもJavaコードも、JVMからみると両方りょうほうともJavaバイトコードとして解釈かいしゃく実行じっこうされるという意味いみ区別くべつがない。Groovyのこのような仕組しくみから、GroovyはJavaときわめて親和しんわせいたかく、 Java技術ぎじゅつでつち使つかわれてきた開発かいはつインフラやライブラリ、ノウハウ、ツール、 JVM最適さいてき技術ぎじゅつなどのおおくをそのまま流用りゅうようすることができる。 Groovyから生成せいせいしたクラスファイルは通常つうじょうのクラスファイルであるので、 Javaクラスファイルを要求ようきゅうするプラグインなどをGroovyで記述きじゅつすることも容易よういである。

Groovyは、おな実行じっこうシステムを共有きょうゆうする、Javaコードのべつ表記ひょうきほうだとかんがえることもできる。

言語げんご仕様しよう

Groovyの言語げんご仕様しようはJavaのそれをベースとしており、基本きほんてきにJavaプログラマにとってしたしみやすいものである。 Groovyはスクリプト言語げんごとして大幅おおはば簡易かんいされた記述きじゅつゆるしている。以下いか簡略かんりゃく記述きじゅつ可能かのうとするGroovy言語げんご特徴とくちょうしめす。

  • Groovyコードはクラス定義ていぎちゅうにある必要ひつようはなく、クラス定義ていぎ外側そとがわでのメソッドの定義ていぎじつ行文こうぶん記述きじゅつ可能かのうである。
  • 変数へんすうかた宣言せんげん不要ふようである。宣言せんげんをしなかった場合ばあいObjectがたとしてあつかわれ、メソッドしはすべて動的どうてきディスパッチによって解決かいけつされる(変数へんすうかた宣言せんげんをすることも可能かのうであり、静的せいてきなスタイルと動的どうてきなスタイルの場合ばあいおうじた使つかけることができる)
  • メソッドしの括弧かっこ省略しょうりゃくできる。
  • 行末ゆくすえのセミコロンは省略しょうりゃくできる。
  • リストやマップの初期しょき記述きじゅつする構文こうぶんつ。
  • 演算えんざんのオーバーロード定義ていぎ(ユーザ定義ていぎ演算えんざん)が可能かのうである。
    • リストやマップをあつか演算えんざん定義ていぎされている。
    • BigDecimal、BigIntegerがたなどについては四則しそく演算えんざんがオーバーロード定義ていぎされている。
  • 検査けんさ例外れいがいをthrowsするメソッドをさいにもtry/catchでかこんだりがわメソッドをthrows宣言せんげんする必要ひつようはない。
  • プリミティブがたはリファレンスがた同様どうようあつかうことができる(明示めいじてき変換へんかんおこな必要ひつようはない)。
  • switch/caseぶん任意にんいかたたいして分岐ぶんきすることができるように拡張かくちょうされている。
  • for(i in ..)形式けいしきのforぶん(J2SE 5.0("Tiger")のそれと同様どうよう)。
  • J2SEの正規せいき表現ひょうげんクラスをあつかうためのみの演算えんざん(=~や==~など)が用意よういされている。また構文こうぶんじょう特別とくべつあつかいされておりPerlやRubyと使用しようができる。
  • 文字もじれつ定数ていすうちゅう任意にんいのGroovyのしきむことができる(${}の記法きほうもちいる。GStringとぶ)。
  • Getter、Setterメソッドの自動じどう生成せいせい
  • フィールドアクセスの記法きほうでGetter、Setterメソッドをすことができる。
  • デフォルト引数ひきすう(メソッド・コンストラクタしチェインの自動じどう生成せいせい)。
  • 名前なまえつき引数ひきすうでのメソッドし。

特徴とくちょうてき言語げんご機能きのう

Groovyの特徴とくちょうてき言語げんご機能きのうのいくつかを以下いかしめす。

GroovyMarkup

Groovyコードの表記ひょうき使つかってツリーデータ構造こうぞうげをおこなう。 具体ぐたいてきには、クロージャやダイナミックなメソッド追加ついか機能きのうもちいて、 新規しんきノードの追加ついかをメソッドしとして、 その新規しんきノードがノードぐんをクロージャとして記述きじゅつする。

GroovyMarkupは基本きほんてき機能きのうであり、GroovyMarkupを使つかった具体ぐたいてきな ライブラリとしては、SwingのGUIコンポーネントのてをおこなうSwingBuilder、 DOMのようなXMLデータ構造こうぞうてるMarkupBuilderなどがある。

クロージャ

Groovyではコードブロックをいちきゅう市民しみんオブジェクトとして生成せいせいし、 変数へんすう格納かくのうしたりメソッド引数ひきすうもどとしてわたししたりすることができる。 Groovyのライブラリはかえ処理しょり入出力にゅうしゅつりょく処理しょりなどを中心ちゅうしんにクロージャが駆使くしされており、 簡潔かんけつ表記ひょうきおこなうことができる。

Groovy JDK

GroovyからJ2SEの標準ひょうじゅんAPIをすべてすことができるが、 このさいにGroovyから使つかうと便利べんりなメソッドがリフレクションもちいてJ2SEクラスに擬似ぎじてき多数たすう追加ついかされている。たとえば、クロージャをとるFile.eachLine()といったメソッドを使用しようすることができ、 以下いかよう記述きじゅつ可能かのうとなっている。

new java.io.File("test.txt").eachLine{
  println it
}

言語げんごからの影響えいきょう

James StrachanはGroovyはオブジェクト指向しこうスクリプト言語げんごRubyからおおきな影響えいきょうけていることをなん公言こうげんしている。 実際じっさい、クロージャの仕様しよう表記ひょうき、その予約よやく選択せんたくなどにおいてRubyからの影響えいきょう色濃いろこることができる。 その、Python、Dylan、Smalltalkなどからも言語げんご機能きのうまれている。

適用てきよう分野ぶんや

Groovは開発かいはつちゅう言語げんごでありバグや問題もんだいてんすくなくないが、 現状げんじょう有用ゆうよう用途ようととしては、 Javaシステム開発かいはつにおけるテストコードの記述きじゅつげることができる(Groovyには標準ひょうじゅんでJUnit機能きのうまれている)。もちろんスクリプト言語げんごとして、フィルタてきなツールをやプロトタイプをくだすことも容易よういである。

アプリケーションの複雑ふくざつなコンフィグレーションやカスタマイズよう言語げんごとしてもちいるということも注目ちゅうもくされている。Antの設定せっていファイル(build.xml)をGroobyで記述きじゅつする 機能きのう標準ひょうじゅんまれているし、いくつかのDIコンテナ(依存いぞんせい注入ちゅうにゅうコンテナ、IoCコンテナ) とばれるアプリケーションフレームワークにおける起動きどう設定せっていファイル の記述きじゅつ言語げんごとして採用さいようされるなど、XMLの代用だいようとして採用さいようされはじめている。

将来しょうらいてきには、既存きそんJavaシステムを連携れんけいさせるグルー言語げんごとして、 Windowsの世界せかいにおけるVBやVBAの役割やくわりをJavaシステム全般ぜんぱんにおいてたせる可能かのうせいがある。

標準ひょうじゅん

Groovyは2004ねん3がつ29にちにJava技術ぎじゅつ標準ひょうじゅんプロセスJCPにおいてJSR 294として受理じゅりされ仕様しよう標準ひょうじゅんがすすめられている。このことによってcodehausによる実装じっそう以外いがい実装じっそうてくる可能かのうせいまれている。また各社かくしゃ製品せいひんベンダによってサポートがすすめられていくことが期待きたいされる。

サンプルコード

以下いかにGroovyのサンプルコードをしめす。

println "hello world"
[1,2,3,4,5].each {println "${it * 2}"}
map = ["taro":1, "jiro":2]
map["taro"] = 3
println map["taro"]