GroovyはJAVAをもっと美しくします


GroovyはJVMベースの敏捷な開発言語として、多くの分野で有名で、多くの経験のあるプログラマーにとってよく知られています.今日はここでGroovyの基礎と面白さを紹介します.
  まず、Groovyの誕生は皆さんに教えて、JVMの上でJAVAの1種の言語の編纂するものだけを走ることができるのではありませんて、Groovyがやり遂げたため、そしてGroovyはJAVAとよく結合して使うことができて、Springとの集積を含んで、1+1〉2の効果を創造します.
  そして、Groovyに触れたことのある人は、JAVAのクラスライブラリを直接使用できるため、Groovyの使用が極めて簡単になり、Groovyの文法を学んだ後、極めてシンプルで素朴で優美な文法やコード文に完全に惹かれる人が多いことに気づきます.
  Groovyはオブジェクト向けの言語であり、純粋にスクリプト言語として機能するため、Groovyの文法上、RubyやPythonの影が多く見られる点がJAVAの劣勢を補っている.JAVAベースのプログラマーとしてGroovyの学習コストはほぼゼロです.
  Groovyのシンボル的な特徴は、ダイナミックで、シンプルで強力な閉パッケージ、ファイル処理の簡素化です.
  よく知られているように、JAVAは変数を定義するときにそのタイプを決定しなければならないが、動的言語であるGroovyは、変数に値を付与するときに、このオブジェクトのタイプを決定し、動的なメリットは柔軟性である.もちろんこれはGroovyの氷山の一角にすぎず、多くの場合、GroovyはJAVAのスクリプト言語への補完として使われている.
  時には、コンパイル期間が分からず、実行期間だけパラメータを得ることができる数式やルールをコンパイル期間中に処理する必要がある場合、スクリプト言語に依存する必要があることがわかります.もちろん、JAVAを直接JAVA Scriptに走らせることもできますが、Groovyの強力な文法を見ると、より良い選択があることがわかります.
  例を見てみましょう
 class Human{

 void help(){
    println("human help")
   }
}

class Animal{
   void help(){
     println("animal help")
   }
}


def takeHelp(helper){
   helper.help()
}
//Human a = new Human()
//a.help()
takeHelp(new Human())
takeHelp(new Animal())

実行結果は
human help
animal help
これがGroovyのダイナミックな表現の古典的な例です.takeHelp(helper)という方法では、パラメータを指定するタイプは全くありません.入力されたオブジェクトにhelp()メソッドがあれば正しく実行されるのを見ることができます.JAVAが統一された親を継承する必要があるという文法に慣れていれば、Groovyの優位性を体得することができます.
  Groovyの閉パッケージの例を見てみましょう
def closureTst = {
 para1,para2,closure -> 
 println("hello! $para2 & $para1");
 closure.call();
}

Closure clo1 = closureTst(1,2,{println("hello")});

  実行結果は
hello! 2 & 1
hello
この例では,Groovyが{}で閉パケットを定義し,->を用いて変数と方法を結びつけることを示した.さらに,closureTstメソッドを実行するとき,3番目のパラメータ自体も閉パケットブロックであり,call()メソッドによって実行できることが分かった.Groovyの閉パッケージはJAVAの匿名内部クラスよりずっと簡潔であることがわかる.
  Groovyの興味深い特性はかなり多く、像も含まれています.

 String str ='''Hello 
World!
'''

println(str);
 

Hello
World
Stringのクロスラインを3つの引用符で直接サポートし、JAVAで嫌な+号でやっと会えました.
  次にJAVAでGroovyを使う方法についてお話しします.
実はJAVAでGroovyを使う方法が非常に多いので、ここでは最もよく使われる例をいくつか挙げます.
  例えば、JAVAのクラスでは、GroovyのファイルEmailGroovy.groovyを書きました.
package cn.newtouch.rdc.test.groovy;

import groovy.lang.GroovyShell;

import java.io.File;


public class GroovyTest {

	public static void main(String args[]) throws Exception{
	    ClassLoader parent = GroovyTest.class.getClassLoader();  
	       
	    File file = new File("EmailGroovy.groovy");    
      
        GroovyShell gs = new GroovyShell(parent);
     
        Object r =  gs.evaluate(file);
        System.out.println(r);
  
	}
}

ファイル形式でGroovyファイルを読み込んで実行したり、文字列で直接読み込んだりすることができます.GroovyShell、evaluateでgroovyファイル全体を実行したり、
ClassLoader parent = GroovyTest.class.getClassLoader();    
  GroovyClassLoader loader = new GroovyClassLoader(parent);  
	  
  Class<?> groovyClass = loader.parseClass(file);  
  GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
groovyObject.invokeMethod();

このような書き方は、必要な方法を明確に実行する.
ここまで言うと、このEmailGroovy.groovyの内容を見てみましょう.

def emails = new XmlParser().parse("emails.xml");

emails.email.each{

  println"${it.@id} ${it.subject.text()}";
  
  }
このコードはXMLを解析するために使用され、emails.xmlというXMLの内容は

  
  hello world
  [email protected]
  2010-11-01 10:10:30
  

  
  hello world demo 2
  [email protected]
  2010-11-02 10:10:30
  

  
  hello world demo 3
  [email protected]
  2010-11-03 10:10:30
  

  

走ってみたら
1 hello world
2 hello world demo 2
3 hello world demo 3
わずか3行のコードでXMLの解析が解決された.
これはDOM 4 JとJDOMの学友の情を使ってどうして堪えることができますか!
また、業界でSpringが一般的に使われている今日、GroovyとSpringの統合も非常に便利で、似たようなものを使用することができます.
script-source="classpath: EmailGroovy.groovy"
refresh-check-delay="10000">

Groovyファイルを直接コンパイルしたJAVAバイトコードはSpringのIOCコンテナで管理され、通常のJAVA BEANを使用するように簡単で、refresh-check-delayパラメータを使用することで、アプリケーションを再起動することなく、実行期間中にgroovyファイルの変化を動的に読み取ることができます.
   紙面が限られているため、Groovyの紹介はここまでで、動的言語を知りたい学生に役立つことを望んでいます.