�ʲ���ʸ�Ϥϡ�Object Computing, Inc(OCI) �ˤ���The Java News Brief��(2004ǯ2��) �˷Ǻܤ��줿��Mark Volkmann �ˤ���Groovy - Scripting for Java�פ���������������������ΤǤ��������Ԥε��Ĥ������������������Ƥ��ޤ��������ˤ����äƤϡ�ma2����takai���󤫤���Ƥ��Ф��ƥ����Ȥ򤤤������ޤ��������꤬�Ȥ��������ޤ���

Groovy ������ȯŸ��ο���������Ǥ����ܵ����θ�ʸ��2004ǯ2��Τ�ΤǤ��ꡢ�����������Ƥ� Groovy �κǿ��������ɿ路�Ƥ���櫓�ǤϤ���ޤ������������Ǥξ���(1.0-beta4)��ʤ�٤�ȿ�Ǥ���褦�ˤϤ��ޤ������������ǥ�꡼���ޤǤˤϤ���˴��Ĥ���ѹ����ä����뤳�Ȥ�ͽ�ۤ���ޤ��������ε��Ҥ� Groovy �θ����Ȥ��ۤʤ���ϡ�������ͥ�褷�Ƥ������������ΰ����ǡ��������ä�����Τ��ε����ؤΥե����ɥХå��򴿷ޤ��ޤ���Ϣ��������������ޤǤ���������ꤤ���ޤ����ե����ɥХå��ϵ��������ƤΤߤʤ餺�����������ˤĤ��Ƥⴿ�ޤǤ���

�����Ǥμ�ʲ�������:



Groovy - Java�ѥ�����ץȸ���

by
�ޡ������ܥ륯�ޥ�, �ѡ��ȥʡ�
Object Computing, Inc. (OCI)

�ܼ�

�Ϥ����

Groovy �ϥ����ץ󥽡����Υ�����ץȸ���Ǥ��롣Java �Ǽ������졢Java �ȶ�̩�����礵��Ƥ��롣�Ȥ��ˤ����äƤ� J2SDK 1.4 ��ɬ�פ���Groovy �� Ruby �� Python �Ȥ��ä�������ץȸ���ε�ǽ�Τ����Ĥ��� Java ���ɲä��Ƥ��롣Groovy �ε�ǽ�ˤϡ�ưŪ���դ������������㡢�ưפʥ��֥������ȡ��ʥӥ�������󡢤����ơ�List �� Map ���갷������δʷ��ʸˡ���ޤޤ�Ƥ��롣����������ǽ(�Ȥ����¿���ε�ǽ)�ξܺ٤��ܵ����Ǥϼ��夲�롣

Groovy �Υ����֥����Ȥ�����Ѥ��褦�� "Groovy �Ϥ��ʤ��� Java �ץ�åȥե�����Ǽ��᤯���ʷ�ˡ������Ƴڤ�����ȤǤ���褦���߷פ���ޤ������� Groovy �� Python �� Ruby ���϶����� Java �ץ�åȥե�����ˤ⤿�餷�ޤ���"

Groovy ������ץȤǤϤ����� Java ���饹�����ѤǤ��롣Groovy ������ץȤ� Java �ΥХ��ȥ�����(.class �ե�����)�ؤȥ���ѥ���Ǥ���Τǡ����̤� Java ���饹����ƤӽФ����Ȥ�Ǥ��롣Groovy ����ѥ���Ǥ��� groovyc �ϡ�Groovy ������ץȤ� Java �������ե������ξ���򥳥�ѥ��뤹�뤳�Ȥ��Ǥ��뤬�������� groovyc �ǤϤ����Ĥ��� Java ʸˡ(���Ȥ��Хͥ��Ȥ������饹)��̤���ݡ��ȤǤ��롣

������ϡ����ץꥱ����������Τ� Groovy �ǽ񤯤��Ȥ��Ǥ������Υѥե����ޥ������� Java ���ץꥱ�������ȤۤȤ���������ʤ����������������Groovy ��¾�Υ�����ץȸ���(Ruby��Python��Perl�������� BeanShell)�Ȥϰۤʤ�Ȥ����������������ߡ�Groovy ����ǽ�� Java �������롣 ���θ����ΤҤȤĤϡ��������줿 Groovy �ΥХ��ȥ����ɤ����󥹥ȥ饯���� private/protected �᥽�åɤ�ƤӽФ��Τ˥�ե쥯���������Ѥ��Ƥ��뤿���������Ͼ���Υ�꡼���Dz�褵����������

Groovy �γ�ȯ�� James Strachan �� Bob McWhirter �ˤ�äƻϤ��줿��James ��¾�ˤ⤿������Υ����ץ󥽡������ץ������Ȥγ�ȯ�˷Ȥ�äƤ���(Jelly��dom4j��Jaxen��Betwixt�������� Maven)��Bob �� Jaxen �� Drools(�����ץ󥽡����ǥ��֥������Ȼظ��� Java �롼�륨�󥸥�)���ϻϼԤǤ⤢�롣

�ܵ����Ǥ� Groovy �ε�ǽ�Τ��٤ƤǤϤʤ���������¿������夲�롣�ɼԤ� Java ��ʸˡ�� Groovy ��ʸˡ�Ȥ���Ӥ��Ǥ������٤ˤ� Java ��ʸˡ�˿Ƥ���Ǥ����Τ����ꤹ�롣

���줬���ץ�����ߥ󥰸����ʸˡ��������ΤȤ���Τϲ����ˤĤ�������Ū�˹�դǤ���С��ץ�����ߥ󥰸���ο��Ϥ��ۤ�¿����ɬ�פȤ��ʤ������������¤ˤϥץ�����ߥ󥰸��줬��¿��¸�ߤ��Ƥ��뤳�Ȥ�ͤ���ȡ����줬��դ�ã���Ƥ��ʤ����Ȥ����餫�����ܵ�������λ��ˡ�Java ��ʸˡ�Ǥޤä�����ʬ�ǡ�Groovy ��ʸˡ�ϥ��󥿥å��������奬�����Ť����Ƹ��˹��ʤ��ʡ��Ȼפ����⤷��ʤ����⤷�����ʤ�������Ƚ�Ǥ����顢��Ȥ��Ƥ� Pat Niemeyer �� BeanShell �� http://www.beanshell.org ������Ȥ��Ƥ���Ĵ�٤Ƥߤ뤳�Ȥ򤪾��᤹�롣�����ǤϤʤ���Groovy �δʷ��ʸˡ���������ä��ʤ顢����⤦�ۤ�ȥ��롼���������!!

Groovy �Υ���������ɤȥ��󥹥ȡ���

Groovy �����������ɤ���ˤϡ��ʲ��μ��˽�����

  1. http://groovy.codehaus.org/ �إ���������
  2. �ڡ��������Υʥӥ��������С��Ρ� "Download" �Υ�󥯤򥯥�å����롣
  3. "this site" �Υ�󥯤򥯥�å����롣
  4. ����������ɤ������С������Υ�꡼���򥯥�å����롣

�ǿ��Ǥ� CVS �ˤ��ꡢ��������������ɲ�ǽ���������ˤĤ��Ƥ��������򻲾Ȥ��Ƥۤ�����

Groovy �򥤥󥹥ȡ��뤹��ˤϡ��ʲ��μ��˽�����

  1. ����������ɤ��� ZIP �ե������Ÿ�����롣
  2. Ÿ�������ǥ��쥯�ȥ��Ķ��ѿ� GROOVY_HOME �����ꤹ�롣
  3. �Ķ��ѿ� PATH �� $GROOVY_HOME/bin (UNIX�ξ��) �ޤ��� %GROOVY_HOME%\bin (Windows�ξ��)�����ꤹ�롣

Groovy �μ¹�

Groovy �Υ�����ץȤ�¹Ԥ���ˤ�4�������ˡ�����롣 �ɤ���ˡ�Ǥ��äƤ⡢������ץȤϥѡ�������� Java ���������Ѵ����줿�����ǡ� Java �Х��ȥ����ɤؤȥ���ѥ��뤵��롣

����Ū������

groovysh ���ޥ�ɤϡ�Groovy �Υ��ơ��ȥ��Ȥ����ϤǤ��� ����Ū�������ư���롣 ���ơ��ȥ��Ȥ� Enter �����򲡤����Ȥ�ʣ�������ϤǤ��롣 ���ơ��ȥ��Ȥϡ�execute ���ޥ��[*1]�����Ϥ����ޤ�ɾ������ʤ���

����Ū Swing ���󥽡���

groovyConsole ���ޥ�ɤ� Swing �Υ�����ɥ���ư���롣������ɥ��β����ڥ���� Groovy ���ơ��ȥ��Ȥ����Ϥ��롣Actions ��˥塼���� Run �����֤ȥ��ơ��ȥ��Ȥ��¹Ԥ���롣���ϤϾ����ڥ����ɽ������롣File ��˥塼����Ѥ��ơ�������ץȤ�ե����뤫�鳫�����ꡢ�ե��������¸���뤳�Ȥ��Ǥ��롣

GroovyConsole screen shot

������ץȥե�����ˤ��¹�

Groovy �Υ�����ץȥե����� (����Ū�ˤϳ�ĥ�� .groovy �Υե�����)�򼡤Τ褦�ʥ��ޥ�ɤ���¹Ԥ��뤳�Ȥ��Ǥ��롣groovy script-name.groovy

����ѥ���ѥ�����ץȤˤ��¹�

Groovy ������ץȤ� groovyc script-name.groovy ���ޥ�ɤ���Ѥ��� Java �� .class �ե�����ؤȥ���ѥ���Ǥ��롣������ץȤˤϥ롼�������ơ��ȥ���[*2]�����ä��Ȥ��Ƥ⡢�������줿 .class �ե�����ˤ� main �᥽�åɤ��ޤޤ�Ƥ���Τǡ�java script-name ���ޥ�ɤ�Ȥä� Java ���ץꥱ�������Ȥ��Ƽ¹ԤǤ��롣main �᥽�åɤ����ƤˤĤ��Ƥϸ�Ҥ��롣�¹Ԥˤ����äƤϥ��饹�ѥ��� Groovy �� lib �ǥ��쥯�ȥ�ˤ��� groovy*.jar �� asm*.jar ���ɲä���ɬ�פ����롣

�ʤ�ȡ����κ�Ȥ�Ԥ�����Υ������� Ant ���������Ѱդ���Ƥ��롪 org.codehaus.groovy.ant.Groovyc ���饹����������

[*1]����: "go"���ޥ�ɤǤ�¹Բ�ǽ��
[*2]����: ����Ū�ˤϤɤΥ��饹�ˤ�°���ʤ����ơ��ȥ��ȡ�

ʸˡ�ξܺ�(�ΰ���)

�ޤ��� Java �� Groovy ��ʸˡ��μ�ʰ㤤����夲�롣�٤�����ΤˤĤ��Ƥϸ�Ҥ��롣

[*3]����: 1.0beta4���Ȥ��Ǥ�ɾ���ͤ��֤�褦�ˤʤäƤ���褦����
[*4]����: ����ϸ�ʸ�θ��ꡣJava�Υ᥽�åɥ������פΥǥե���Ȥ� package-private��

ưŪ���դ�

�ѿ����ץ��ѥƥ����᥽�å�/����������ΰ����������ƥ᥽�åɤ�����ͤˤ����ơ���������Ͼ�ά�Ǥ��롣�����Ϥɤ�ʷ��Ǥ�Ȥ뤳�Ȥ��Ǥ��롣�ޤ����夫��ۤʤ뷿�������Ƥ뤳�Ȥ�Ǥ��롣������󡢥ץ�ߥƥ��ַ������Ѳ�ǽ��(auto-boxing �����)�����Ѵ��Τ�¿����ɬ�פ˱����Ƽ�ưŪ�˹Ԥ��롣���Ȥ��С�String ��ץ�ߥƥ��ַ�(int �Ȥ�)�ȷ���åѡ����饹(Integer �Ȥ�)�Ȥδ֤Ǥη��Ѵ��������������Τ������ǡ��ץ�ߥƥ��ַ��򥳥쥯�������ɲä��뤳�Ȥ��Ǥ��롣

�ɲä��줿�᥽�å�

Groovy �� java.lang.Object �� java.lang.String �Ȥ��ä�ɸ�� Java ���饹�˿�¿���Υ᥽�åɤ��ɲä��Ƥ��롣�ܺ٤� http://groovy.codehaus.org/groovy-jdk.html �򻲾ȤΤ��ȡ������Ǥ� Object ���饹���ɲä��줿��Τ򼨤�������¾�Τ�ΤˤĤ��Ƥϸ�Ҥ��롣

dump

<class-name@hashcode property-name=property-value ...> �η�����ʸ������֤��� ���Ȥ��С� <Car@ef5502 make=Toyota model=Camry> �Ȥ��ä�������

print �� println

������ static �� print �᥽�åɤϥ��֥������Ȥ� toString �ͤ���Ϥ��롣 ���Ȥ��С� print car ���뤤�� println car �Ƚ񤯡�

invokeMethod

��ե쥯���������Ѥ���ưŪ�ʥ᥽�åɸƤӽФ���Ԥ��� ʸˡ�ϡ� object.invokeMethod(method-name, argument-array) ���� ���Υ���ץ�ϡ�4����Ϥ��롣

    s = 'abcabc' // Java ��ʸ����
    method = 'indexOf'
    args = ['b', 2]
    println s.invokeMethod(method, args) // 4
	

Groovy �� String

��ƥ��ʸ����ϡ����󥰥륯�����Ȥޤ��ϥ��֥륯�����ȤǰϤࡣ���֥륯�����Ȥ�Ȥä����ϡ��������ͤ����ѤǤ��롣�������ͤ�ʸˡ�ϡ� ${expression} ����Ruby�Ǥ� # ������� $ ����Ѥ��롣���֥륯�����ȤǰϤޤ줿ʸ����ˤҤȤİʾ���������ͤ��ޤޤ���硢����ʸ����� groovy.lang.GString ���֥������Ȥ�ɽ������롣�����Ǥʤ�ʸ����� java.lang.String ����GString ��ɬ�פ˱����� java.lang.String �ؤȶ���Ū���Ѵ�����롣

groovy.lang.GString �Ȥ��ä� Groovy ���饹�� Javadoc �ϡ� http://groovy.codehaus.org/apidocs/ ���ɤळ�Ȥ��Ǥ��롣

�������ͤ� toString �᥽�åɤ��������ݤˤȤƤ������������Ȥ��С�

    String toString() { "${name} is ${age} years old." }

ʣ����ʸ���������������ˡ��3���ढ�롣�ʲ��Υ���ץ�Ϥ��٤�Ʊ����̤ˤʤ롣�Ǹ�Υ���ץ�ϥҥ��ɥ������("here-doc")�ȸƤФ���Τ���3�������ʸ����ǥ�ߥ�ʸ����Ȥ��ƻ��ꤹ��ȡ�ʸ������ͤˤϺǽ��2���ܤΥǥ�ߥ��֤˸����ʸ�����ͤȤ������ꤵ��롣"EOS" ("End Of String" ��ά)�Ϥ褯�Ȥ���ǥ�ߥ��ͤ������������¾��ʸ������ѤǤ��롣

    s = "  This string
      spans three \"lines\"
      and contains two newlines."

    s = """  This string
      spans three "lines"
      and contains two newlines."""

    s = <<<EOS
      This string
      spans three "lines"
      and contains two newlines.
    EOS

�嵭�Υ����ɤǡ��Ǹ�β��Ԥ��Ĥ�ʤ����Ȥ����ա�

�ʲ��� java.lang.String ���ɲä���Ƥ���᥽�åɤ򼨤���

contains

��������ʬʸ�����ޤ�Ǥ��뤫��Ĵ�٤롣 'Groovy'.contains('oo') �� true ���֤���

count

����������ʬʸ����νи�����򥫥���Ȥ��롣 'Groovy Tool'.count('oo') �� 2 ���֤���

tokenize

������Ϳ����줿�ǥ�ߥ�����Ѥ���ʸ�����ȡ����󲽤������Υȡ�����Υꥹ�Ȥ��֤����ǥ�ߥ������λ���Ͼ�ά�Ǥ��롣�ǥե���ȤǤ϶���ʸ�������Ѥ���롣 'apple^banana^grape'.tokenize('^') �� ['apple', 'banana', 'grape'] ���֤���

minus

�о�ʸ���󤫤顢�����Ȥ���Ϳ����줿��ʬʸ����Τ����ǽ�˽и������Τ������롣 'Groovy Tool' - 'oo' �� 'Grvy Tool' ���֤���

multiply

������Ϳ����줿��������о�ʸ����򷫤��֤��� 'Groovy' * 3 �� 'GroovyGroovyGroovy' ���֤���

����ɽ�� (regex)

�ޤ��ϡ�J2SE 1.4 �Ǥ�����ɽ���򤪤��餤���Ƥ����������ˡ�Groovy ���ɤΤ褦�ˤ�����ĥ���Ƥ��뤫��������롣

J2SE 1.4 ������ɽ���� java.util.regex �ѥå������Υ��饹�ǥ��ݡ��Ȥ���롣Pattern ���֥������Ȥϡ�����ѥ��뤵�줿����ɽ����ɽ����Pattern.compile("pattern") �᥽�åɤ���������롣����ɽ����ʸˡ�� Pattern ���饹�� Javadoc �Dz��⤵��Ƥ��롣Matcher ���֥������Ȥϥޥå��о�ʸ������Ф���ޥå��󥰤η�̤��ݻ����롣Matcher ���֥������Ȥ� pattern.matcher("text") �᥽�åɤ���������롣ñ��ʸ���󤬥ѥ�����˥ޥå�����Τ����Τꤿ���ΤǤ���С�matcher.matches() �᥽�åɤ�Ȥ����ѥ�������ǥХå�����å����Ȥ��ˤϡ�������ɲäΥХå�����å��夬ɬ�פ���

Groovy ������ɽ����3����α黻�Ҥǥ��ݡ��Ȥ��롣
~"pattern" �� Pattern ���֥������Ȥ��������롣����ϡ�Pattern.compile("pattern") ��Ʊ����̣�Ǥ��롣
"text" =~ "pattern" �� Matcher ���֥������Ȥ��������롣����� Pattern.compile("pattern").matcher("text") ��Ʊ����̣�Ǥ��롣
"text" ==~ "pattern" �� boolean �ͤ��֤�������� Pattern.compile("pattern").matcher("text").matches() ��Ʊ����̣�Ǥ��롣¾���ɲä��줿�᥽�åɤˤĤ��Ƥ� Pattern ���饹�� Matcher ���饹�� Javadoc �򻲾ȤΤ��ȡ�

����ץ�򼨤�����

    pattern = "\\d{5}" // ͹���ֹ�˥ޥå�(5��)
    text = "63304" // ͹���ֹ�

    println text ==~ pattern // "true" �����Ϥ����

    m = text =~ pattern
    println m.matches() // "true" �����Ϥ����

    // ������Ǥϡ��ѥ�����ϥ�ƥ��ʸ����Ǥʤ���Фʤ�ʤ���
    // �ѿ��ϻȤ��ʤ���
    p = ~"\\d{5}"
    m = p.matcher(text)
    println m.matches() // "true" �����Ϥ����

Groovy �ʥ�����ץ�

Groovy �ǽ񤫤줿������ץȤΥ������ϡ����̤ϳ�ĥ�� ".groovy" �Υե��������������ץȤˤ�(��ͳ�ʽ����)�롼�������ơ��ȥ��ȡ����饹��°���ʤ��᥽�å�����������ƥ��饹������ޤޤ�Ƥ��롣

���Ȥ��С�

    // �롼�������ơ��ȥ���
    println 'loose statement'
    myMethod 'Mark', 19
    println new MyClass(a1:'Running', a2:26.2)
    
    // ���饹��°���ʤ��᥽�åɤ����
    def myMethod(p1, p2) {
      println "myMethod: p1=${p1}, p2=${p2}"
    }
    
    // 2�ĤΥץ��ѥƥ���1�ĤΥ᥽�åɤ���ĥ��饹�����
    class MyClass {
      a1; a2
      String toString() { "MyClass: a1=${a1}, a2=${a2}" }
    }

�᥽�åɤȥ��饹������ϡ����Ѥ����������ˤʤ��Ƥ�褤���롼�����᥽�å�[*5]�ϳ������륹����ץȥե�������б����륯�饹�� static �᥽�åɤȤ��ƥ���ѥ��뤵��롣���Ȥ��С�foo �Ȥ���̾���Υ롼�����᥽�åɤ���Bar.groovy �Ȥ���̾���Υ�����ץȥե�����ˤ���С�Bar ���饹�� static �᥽�å� foo �Ȥ��ƥ���ѥ��뤵��롣�롼�������ơ��ȥ��Ȥϡ���ư��������� main �᥽�åɤ���ƤӽФ���� run �᥽�åɤˤޤȤ���롣

groovyc ����Ѥ��ƥ�����ץȤ򥳥�ѥ��뤷����硢����ѥ����Υ��饹�ˤϡ����٤ƤΥ롼�������ơ��ȥ��Ȥ��ޤȤ��줿 run �᥽�åɤȡ����� run �᥽�åɤ�ƤӽФ� main �᥽�åɤ���ư���ɲä���롣

���ޤΤȤ�����������ץȤ���¾�Υ�����ץȤ�¹Ԥ��뤿��ˤϡ��¹Ԥ�����������ץȤ򥳥�ѥ��뤷������ݡ��Ȥ��ʤ���Фʤ�ʤ��������Զ��϶ᤤ�����˽��������Ϥ�����

[*5]����: ����Ū�ˤϤɤΥ��饹�ˤ�°���ʤ��᥽�åɡ�

�黻�ҤΥ����С�������

Groovy ������α黻�ҤΥ����С������ɤ򥵥ݡ��Ȥ��Ƥ��롣�����С������ɲ�ǽ�ʱ黻�ҤϤ��줾�졢����Υ᥽�åɤ��б��Ť����롣�б��Ť���줿�᥽�åɤ�������뤳�Ȥǡ����Υ��饹�Υ��֥������Ȥϥ᥽�åɤ��б�����黻�Ҥ򥪡��С������ɤǤ��롣�����С��������б��᥽�åɤ��ͤ��ޤʥѥ�᡼���η��˸����ƥ����С������ɤ��뤳�Ȥ�Ǥ��롣

��ӱ黻��

a == b �� a.equals(b) ���б����롣
a != b �� !a.equals(b) ���б����롣
a === b �� Java �� a == b ���б����롣
a <=> b �� a.compareTo(b) ���б����롣
a > b �� a.compareTo(b) > 0 ���б����롣
a >= b �� a.compareTo(b) >= 0 ���б����롣
a < b �� a.compareTo(b) < 0 ���б����롣
a <= b �� a.compareTo(b) <= 0 ���б����롣

��ӱ黻�Ҥ� null ��ϥ�ɥ뤹��Τǡ�NullPointerException �����Ф�ȯ�����ʤ���null �Ϥɤ�ʥ��֥������Ȥ��⾮������ΤȤ��ư����롣

Groovy �� == �黻�Ҥϡ�ξ�դΥ��֥������Ȥ������Ǥ��뤫��ƥ��Ȥ���=== �黻�Ҥ�ξ�դ�������Ʊ��Υ��֥������ȤǤ��뤫��ƥ��Ȥ��뤳�Ȥ����ա�

compareTo �᥽�åɤ� int ���֤����֤����ͤϡ�a < b �ξ�������͡�a > b �ξ��������͡�Ʊ�ͤξ���0�Ǥ��롣

����¾�α黻��

a + b �� a.plus(b) ���б����롣
a - b �� a.minus(b) ���б����롣
a * b �� a.multiply(b) ���б����롣
a / b �� a.divide(b) ���б����롣
a++ �� ++a �� a.increment(b) ���б����롣
a-- �� --a �� a.decrement(b) ���б����롣
a[b] �� a.get(b) ���б����롣
a[b] = c �� a.put(b, c) ���б����롣

Groovy �ʥ���������

����������Ȥϡ��ѥ�᡼���������뤳�Ȥ��ǽ�ʥ������ҤΤ��ȤǤ��롣�ġ��Υ���������ϡ�groovy.lang.Closure ��Ѿ��������������饹�Ȥ��ƥ���ѥ��뤵��롣����������ηѾ����饹�� call �᥽�åɤ���ġ����Υ᥽�åɤϥ���������μ¹Ԥȡ��ѥ�᡼�����Ϥ���������Ѥ���롣����������ϡ����Ȥ��������줿�������פˤ����ѿ����ɤ߽񤭤Ǥ��롣�����������������������줿�ѿ��ϡ����������㤬��ư���줿�������פ�ͭ���ˤʤ롣������������ѿ����������Ƥ������Ȥ��Ǥ��������᥽�åɤ˰����Ȥ����Ϥ����Ȥ�Ǥ��롣������ħ�� List �� Map�������� String �Υ᥽�åɤǰ��Ϥ�ȯ�����롣�ܤ����ϸ�Ҥ��롣

������������������ʸˡ�ϡ�

    { comma-separated-parameter-list | statements }

�ȤʤäƤ��롣���Ȥ��С�

    closure = { bill, tipPercentage | bill * tipPercentage / 100 }
    tip = closure.call(25.19, 15)
    tip = closure(25.19, 15) // ��ιԤ�Ʊ����̣

�ְ�ä����Υѥ�᡼�����Ϥ��ȡ� IncorrectClosureArgumentException ��ȯ�����롣

�ѥ�᡼����1�ĤΥ���������Ǥϡ�it ������ɤ�Ȥ����Ȥ��Ǥ��롣���ΤȤ����ѥ�᡼���ꥹ�Ȥ��ά���ơ������ it ��Ȥäƥ��ơ��ȥ�����ǻ��ȤǤ��롣���Ȥ��С��ʲ��Υ���������Ϥ������Ʊ����̣�Ǥ��롣

    { x | println x }
    { println it }

�ʲ��� List �ȥ���������Ȥ�����˼��᥽�åɤΥ���ץ�Ǥ��롣���Υ���ץ�Ǥϥ롼�����᥽�åɤȤ��ƽ񤤤�����������󥯥饹�Υ᥽�åɤˤ�Ǥ��롣���Υ᥽�åɤ� list �γ����Ǥ�����˥����������¹Ԥ����ʤ��� list �򥤥ƥ졼�Ȥ��롣�ƥ����������¹Ԥ�����̤Ȥ��� true ���֤��Ƥ������Ǥ� newList ���ɲä��롣�ƤӽФ����ˤ� newList ���֤���Groovy �� find �� findAll �᥽�åɤ��󶡤��Ƥ���Τǡ����̤ϰʲ��Υ���ץ�Τ褦�ˤϽ񤫤ʤ����Ȥ����ա�

    def List myFind(List list, Closure closure) {
      List newList = []
      for (team in list) {
        if (closure.call team) newList.add team
      }
      newList
    }

myFind �᥽�åɤ���Ѥ��륳���ɤ⼨���Ƥ�������

    class Team { name; wins; losses }
    
    teams = []
    teams.add new Team(name:'Rams', wins:12 , losses:4)
    teams.add new Team(name:'Raiders', wins:4 , losses:12)
    teams.add new Team(name:'Packers', wins:10 , losses:6)
    teams.add new Team(name:'49ers', wins:7 , losses:9)

    winningTeams = myFind(teams) { it.wins > it.losses }
    winningTeams.each { println it.name }

�ºݤˤ� myFind �Τ褦�ʥ᥽�åɤ�ɬ�פʤ����Ȥ����Τ⡢List ���饹�ˤϤ��餫���� findAll �᥽�åɤ��Ѱդ���Ƥ��뤫������Ȥ����Ϥ�������

    winningTeams = teams.findAll { it.wins > it.losses }

Groovy Bean

�ʲ��� Groovy Bean �Υ���ץ�ʥ���ץ����

    class Car {
      String make
      String model
    }

���Υ��饹�ϥץ��ѥƥ���2��������Ƥ��뤬���᥽�åɤ�������Ƥ��ʤ�������������������΢�Ǥ��ͤ��ޤʤ��Ȥ��Ԥ��Ƥ��롣���饹��ץ��ѥƥ��������ƥ᥽�åɤΥ������פϥǥե���ȤǤ� public �Ǥ��롣public �� protected �Υץ��ѥƥ��ϡ���̤Ȥ��Ƥ� public/protected �� getter/setter �᥽�åɤ���ư�������줿 private �ե�����ɤˤʤ롣�����Υ᥽�åɤ򥪡��С��饤�ɤ��뤳�Ȥ��ȼ��ο����񤤤���������롣�ץ��ѥƥ�������Ū�� private ��������줿���ˤϡ�getter/setter �ϼ�ư��������ʤ���

�嵭�� Groovy �����ɤϡ��ʲ��� Java �����ɤ�Ʊ����̣�Ǥ��롣

    public class Car {
        private String make;
        private String model;
      
        public String getMake() {
            return make;
        }
      
        public String getModel() {
            return model;
        }
      
        public void setMake(String make) {
            this.make = make;
        }
      
        public void setModel(String model) {
            this.model = model;
        }
    }

Groovy Bean �Ȥ�����������륯�饹�� java.lang.Object ���饹��Ѿ��������� groovy.lang.GroovyObject ���󥿥ե�������������롣���Υ��饹���ɲä����᥽�åɤϡ�getProperty��setProperty��getMetaClass��setMetaClass ������ invokeMethod �Ǥ��롣groovy.lang.MetaClass �ϥ��饹���Ф��ƥ᥽�åɤ�¹Ի����ɲä��뤳�Ȥ��ǽ�ˤ��롣

Groovy Bean �Ǥ�̾���դ��ѥ�᡼�������Ѥ��ƥ��󥹥��󥹤��������뤳�Ȥ��Ǥ��롣���Ȥ��м��Υ����ɤǤϡ��ޤ� Car �ΰ���̵�����󥹥ȥ饯�����ƤФ졢���ˤ��줾��Υץ��ѥƥ��� setter �᥽�åɤ��ƤФ�롣

    myCar = new Car(make:'Toyota', model:'Camry')

Groovy List

Groovy List �� java.util.ArrayList �Υ��󥹥��󥹤����ꥹ�Ȥϥ���޶��ڤ���¤٤��ͤ�ѳ�̤ǰϤळ�Ȥ������Ǥ��롣���Ȥ��С�

    cars = [new Car(make:'Honda', model:'Odyssey'),
            new Car(make:'Toyota', model:'Camry')]

    println cars[1] // Camry �򻲾Ȥ���

    for (car in cars) { println car } // Car �� toString �᥽�åɤ�ƤӽФ�

    class Car {
      make; model
      String toString() { "Car: make=${make}, model=${model}" }
    }

�ꥹ�Ȥ����Ǥ�ꥹ�ȤκǸ夫�饢����������ˤϡ�����ͤ򥤥�ǥå����˻��Ѥ��롣

���Υꥹ�Ȥ� [] �������Ǥ��롣��Ȥ��Ƥϡ�

    cars = []

�ꥹ�Ȥ����Ǥ��ɲä�����ˡ��2���ढ�롣

    cars.add car
    cars << car

�ꥹ�Ȥ����󤫤� array.toList() �᥽�åɤ������Ǥ��롣����ϥꥹ�Ȥ��� list.toArray() �᥽�åɤ������Ǥ��롣

Groovy �Ϥ����Ĥ��Υ᥽�åɤ� java.util.List ���ɲä��Ƥ��롣

count

������Ϳ����줿���֥������Ȥ����������Ǥ��ꥹ����ˤ����Ĥ��뤫������롣
[1, 2, 3, 1].count(1) �� 2 ���֤���

immutable

���쥯������ immutable(�ѹ���ǽ)�ʥ��ԡ����������롣�����ˤ����äƤ� java.util.Collections �� static �� unmodifiableList �᥽�åɤ����Ѥ��Ƥ��롣���Ȥ��С�

      list = [1, 2, 3].immutable()
      list.add 4 // java.lang.UnsupportedOperationException �������������

intersect

2�ĤΥꥹ�Ȥ˶��̤����Ǥ�ޤ���������ꥹ�Ȥ��������롣
[1, 2, 3, 4].intersect([2, 4, 6]) �� [2, 4] ���֤���

join

�ꥹ�Ȥ����Ǥ��줾����Ф��� toString ���ͤδ֤ˡ�������ʸ�������������Ϣ�뤹�롣���Ȥ��С������åȤ���ڤ�ʸ���Ȥ��ƥꥹ�Ȥ˴ޤޤ�뤹�٤Ƥ�ʸ�����Ϣ�뤷������� ['one', 'two', 'three'].join('^') �Ƚ񤯡������ "one^two^three" ���֤���

sort

�ꥹ�Ȥ����Ǥ��¤��ؤ����������ꥹ�Ȥ�������롣java.util.Comparator ��������������Ϥ����Ȥǥ����Ƚ���ѹ����뤳�Ȥ��Ǥ��롣

    fruits = ['kiwi', 'strawberry', 'grape', 'banana']
    // ���ιԤ� [banana, grape, kiwi, strawberry] ���֤���
    sortedFruits = fruits.sort()
    
    // ���ιԤ� [kiwi, grape, banana, strawberry] ���֤���
    sortedFruits =
      fruits.sort {l, r | return l.length() <=> r.length()}

�嵭�κǸ�ˤ��� sort �᥽�åɸƤӽФ��ϡ������������ѥ�᡼���Ȥ����Ϥ�����ץ�Ǥ⤢�롣Groovy �ˤϥ����������ѥ�᡼���Ȥ����Ϥ���᥽�åɤ���¿���Ѱդ���Ƥ��롣

Groovy Bean �Ǥ�ʣ���Υץ��ѥƥ�����Ѥ��������Ȥ���ñ�ˤǤ��롣���Ȥ��С�Player �Ȥ��� Bean �� name��age��score �Ȥ����ץ��ѥƥ�������Ȥ��褦������ Bean �Υꥹ�Ȥ� players �˳�Ǽ����Ƥ��ơ������ age �� score ���ͤ����¤��ؤ���ˤϡ����Τ褦�˽񤯡�

    players.sort { [it.age, it.score] }

min / max

�ꥹ�Ȥ����Ǥޤ���ʸ����ˤ���ʸ��[*6]���顢�Ǿ��ͤ��뤤�Ϻ����ͤ򸡺����롣java.util.Comparator ��������������Ϥ����Ȥǡ�Ƚ����ˡ���ѹ��Ǥ��롣���Ȥ��С��ʲ��Υ����ɤϥꥹ�Ȥ���Ǿ��ͤȺ����ͤ򸡺����롣
[5, 9, 1, 6].min() �� 1 ���֤���
[5, 9, 1, 6].max() �� 9 ���֤���

reverse

�ꥹ�Ȥ����Ǥޤ���ʸ����[*7]�ˤ���ʸ���򡢵ս���¤��ؤ��롣
[1, 2, 3].reverse() �� [3, 2, 1] ���֤���

Groovy �� java.util.List ���֥������Ȥǻ��ѤǤ���褦�ˡ��û��ȸ����α黻�Ҥ򥪡��С������ɤ��Ƥ��롣

�û�

2�ĤΥꥹ�Ȥ��礷���������ꥹ�Ȥ��������롣��ʣ�������Ǥ����äƤ�������ʤ���
[1, 2, 3] + [2, 3, 4] �� [1, 2, 3, 2, 3, 4] ���֤���

����

�ǽ�Υꥹ�Ȥ��������ܤΥꥹ�Ȥˤ������Ǥ��٤Ƥ���������ꥹ�Ȥ��������롣
[1, 2, 3, 4] - [2, 4, 6] �� [1, 3] ���֤��� �ꥹ�Ȥ����Ǥ˥ץ�ߥƥ��ַ����ޤޤ�Ƥ��ʤ���С����Ǥ���Ӥˤ� equals ���Ȥ��롣

[*6]����: 1.0-beta4 �Ǥ�ʸ������Ф���min/max�ϼ¹ԤǤ��ʤ���
[*7]����: 1.0-beta4 �Ǥ�ʸ������Ф���reverse���¹ԤǤ��ʤ�����"abc".reverse()�פΤ褦�˥��å����դ���м¹Բ�ǽ�Ǥ�����

Groovy Map

Groovy Map �ϡ�java.util.HashMap �Υ��󥹥��󥹤����ޥåפϥ���޶��ڤ���¤٤�����/�ͤΥڥ���ѳ�̤ǰϤळ�Ȥ������Ǥ��롣�������ͤȤϥ�����Ƕ��ڤ롣���Ȥ��С�

    players = ['baseball':'Albert Pujols',
               'golf':'Tiger Woods']

    println players['golf'] // Tiger Woods ����Ϥ���
    println players.golf // Tiger Woods ����Ϥ���

    for (player in players) {
      println "${player.value} plays ${player.key}"
    }

    // ����Ͼ�Υ롼�פ�Ʊ����̣
    players.each {player |
      println "${player.value} plays ${player.key}"
    }

���Υޥåפ� [:] �������Ǥ��롣�ʲ��Ϥ��������

    players = [:]

Groovy �� switch ʸ

Groovy �� switch ʸ�Ǥϡ����饹��List��Range��Pattern �ʤɡ������륪�֥������Ȥ�Ȥ��롣case ʸ�� isCase �᥽�åɤ�Ȥä��ͤ���Ӥ��롣��¿���Υ����С��饤�ɤ��줿 isCase �᥽�åɤ��󶡤���Ƥ��롣����η��˸����Ƥ����ƥ����С������ɤ���ʤ��¤ꡢisCase �� equals �᥽�åɤ���Ѥ��롣 case �����饹̾�Ǥ�����ˤϡ�isCase �᥽�åɤ� instanceof ����Ѥ��롣 isCase �᥽�åɤϡ��ȼ��˺����������饹�ǥ����С��饤�ɤ��뤳�Ȥ��Ǥ��롣

�ͤ��ޤʰۤʤ뷿���ͤ��б����� switch ʸ�Υ���ץ�򼨤���

    switch (x) {
      case 'Mark':
        println "got my name"
        break
      case 3..7:
        println 'got a number in the range 3 to 7 inclusive'
        break
      case ['Moe', 'Larry', 'Curly']:
        println 'got a Stooge name'
        break
      case java.util.Date:
        println 'got a Date object'
        break
      case ~"\\d{5}":
        println 'got a zip code'
        break
      default:
        println "got unexpected value ${x}"
    }

Groovy Range

Range(�ϰϥ��֥�������)�� ".." �� "..." �黻�Ҥ���Ѥ����������롣����ץ�򼨤�����

3..7 �ϡ�3 ���� 7�פ�ɽ�� Range ���������롣
3...7 �ϡ�3 ���� 6�פ�ɽ�� Range ���������롣
"A".."D" �ϡ�"A" ���� "D"�פ�ɽ�� Range ���������롣
"A"..."D" �ϡ�"A" ���� "C"�פ�ɽ�� Range ���������롣

�ϰϥ��֥������� �� java.util.AbstractList ��Ѿ����� groovy.lang.Range ���󥿡��ե�������������륯�饹��ɽ������롣Range ���֥������Ȥ� immutable �ʥꥹ�Ȥ���Range ���󥿥ե������� getFrom �� getTo �᥽�åɤ��ɲä��Ƥ���Τǡ����¤Ⱦ�¤�����Ǥ��롣2����� Range �������󶡤���Ƥ��롣 groovy.lang.IntRange �������ͤ˸¤ä��ϰϤ򰷤���IntRange �ˤ� contains �᥽�åɤ��ɲä���Ƥ��ꡢ�ͤ��ϰ���ˤ��뤫��ƥ��ȤǤ��롣 groovy.lang.ObjectRange �ǤϤ���¾�Τ����ʤ뷿�Ǥ��ϰϤ˴ޤ�뤳�Ȥ��Ǥ��롣�����Ǥ� contains �᥽�åɤ��ɲä���Ƥ��뤬���Ȥ���Τ��ϰϤ˴ޤޤ�륪�֥������Ȥ� java.lang.Comparable ��������Ƥ�����˸¤��롣

�ϰϥ��֥������Ȥϥ롼�׹�¤�����Ω�ġ�������ϼ����������Ǽ��夲�롣

Groovy �ʥ롼��

�ͤ��ϰϤ��̤��������֤�������Ԥ��ˤ�6�Ĥ���ˡ�����롣

for

    for (i in 1..1000) { println i }

while

    i = 1
    while (i <= 1000) { println i; i++ }

each

    (1..1000).each { println it }

times

    1000.times { println it }
    // 0 ���� 999 �ޤǡ�

upto

    1.upto(1000) { println it }

step

    1.step(1001, 1) { println it }
    // 1����1000�ޤǡ�
    // �ѥ�᡼�����ͤΤҤȤļ����ǽ�λ���롣

���������������դ��� List/Map/String �Υ᥽�å�

List��Map��������String �Υ᥽�åɤΤʤ��ˤϥ����������ѥ�᡼���Ȥ����Ϥ���᥽�åɤ����롣

each

���쥯���������Ǥޤ���ʸ�������ʸ�����Ф��Ʒ����֤�������Ԥ���java.util.Iterator ����������Ѥ��뤳�Ȥǡ����ʷ�ʥ����ɤ򵭽ҤǤ��롣���Ȥ��С��ꥹ�Ȥ����Ǥο��ͤ򤽤줾��ɽ�������褦�Ȼפ��С�
[5, 9, 1, 6].each {x | println x}
���뤤��
[5, 9, 1, 6].each {println it}
�Ƚ񤱤롣

collect

���쥯�����ޤ���ʸ������Ѵ����ơ����������쥯�����(�ޤ���ʸ����)��������롣���Ȥ��С��ꥹ�Ȥγ����Ǥ��ͤ�2�ܤ������������Ǥ���ĥꥹ�Ȥ��������ˤϡ�
doubles = [5, 9, 1, 6].collect {x | x * 2}
�Ȥ��롣����� doubles �� [10, 18, 2, 12] �򥻥åȤ��롣

find

Ϳ����줿���˹��פ����Τ򥳥쥯���������Ǥޤ�ʸ�������ʸ�����鸡�������ǽ�˽и��������Ǥ��֤������Ȥ��С��ꥹ�Ȥ��椫��5�����礭���ǽ�����Ǥ򸡺���������С�
[5, 9, 1, 6].find {x | x > 5} �Ƚ񤯤� 9 ���֤äƤ��롣

findAll

Ϳ����줿���˹��פ����Τ򥳥쥯���������Ǥޤ���ʸ�������ʸ�����鸡�������и��������Ǥ��٤Ƥ�������֤������Ȥ��С��ꥹ�Ȥ��椫��5�����礭�����Ǥ򤹤٤Ƹ�����������С�
[5, 9, 1, 6].findAll {x | x > 5} �Ƚ񤯤� [9, 6] ���֤äƤ��롣

every

���쥯���������Ǥޤ���ʸ�������ʸ�����٤Ƥ���Ϳ����줿���˹��פ��뤫��Ĵ�٤롣���Ȥ��С��ꥹ�Ȥ˴ޤޤ����������٤�7��꾮��������Ĵ�٤����ΤǤ���С�
[5, 9, 1, 6].every {x | x < 7} �Ƚ񤯤� false ���֤äƤ��롣

any

���쥯���������Ǥޤ���ʸ�������ʸ���ˡ�Ϳ����줿���˹��פ����Τ��ҤȤĤǤ�¸�ߤ��뤫��Ĵ�٤롣���Ȥ��С��ꥹ�Ȥ˴ޤޤ�������7��꾮������Τ��ޤޤ�Ƥ��뤫��Ĵ�٤����ΤǤ���С�
[5, 9, 1, 6].any {x | x < 7} �Ƚ񤯤� true ���֤äƤ��롣

inject

�����֤��ν��ˤϡ��������Ϥ��줿�ͤ��Ȥ�졢���줾��η����֤��Ǥ�ɾ����̤�����ʹߤ��Ϥ���Ƥ��������Ȥ��С�5�γ�������ˤϡ����Τ褦�˽񤱤�(���ޤ긫�����ʤ�������ǤϤ��뤬)��

    factorial = [2, 3, 4, 5].inject(1) {
      prevResult, x | prevResult * x
    }

���Υ���������ϡ�4��¹Ԥ���롣
1����: 1 * 2
2����: 2 * 3
3����: 6 * 4
4����: 24 * 5
��̤ϡ�120 �ˤʤ롣

�ե����� I/O

�ե����뤫��Ԥ��ɤ߹���(2�������ˡ)

����ץ륳���ɤ�(...) �ϥ����ɤξ�ά�򼨤���

    file = new File('myFile.txt')
    file.eachLine { println it }
    lineList = file.readLines()

�ե����뤫��Х�������ɤ߹���(2�������ˡ)

    file = new File('myFile.txt')
    file.eachByte { println it }
    byteList = file.readBytes()

�ǥ��쥯�ȥ�ˤ���ե�������ɤ�

    dir = new File('directory-path')
    dir.eachFile { file | . . . }

�ɤ߹��ߴ�λ���˥꥽�������Ĥ���

Reader �ޤ��� InputStream �����ɤ߹��ळ���Υ᥽�åɤϡ��㳰�������Ƥ�꥽�������Ĥ��뤳�Ȥ��ݾڤ���Ƥ��롣

    file.withReader { reader | . . . }
    reader.withReader { reader | . . . }
    inputStream.withStream { is | . . . }

�񤭹��ߴ�λ���˥꥽�������Ĥ���

��������㳰���ꤲ��줿�Ȥ��Ƥ⡢Writer �ޤ��� OutputStream �ؤν񤭹��ߤ��Ĥ��뤳�Ȥ��ݾڤ��롣

    file.withWriter { writer | . . . }
    file.withPrintWriter { pw | . . . }
    file.withOutputStream { os | . . . }
    writer.withWriter { writer | . . . }
    outputStream.withStream { os | . . . }

�����С������ɤ��줿�����եȱ黻��

String ���ɲä���ˤϡ�

    s = 'foo'
    s = s << 'bar'

StringBuffer ���ɲä���ˤϡ�

    sb = new StringBuffer('foo')
    sb << 'bar'

List ���ɲä���ˤϡ�

    colors = ['red', 'green']
    colors << 'blue'

���ϥ��ȥ꡼����������ɲä���ˤϡ�

    w = new File('myFile.txt').newWriter()
    w << 'foo' << 'bar'
    w.close()

���֥������ȡ��ʥӥ��������

���֥������ȹ�¤(Object Graphs)�� XPath ����ʸˡ��é��ˤϡ��ɥå�(".")�黻�Ҥ���Ѥ��롣NullPointerException �δ�������򤹤�ˤϡ�"->" �� "." ������˻��Ѥ��롣���Ȥ��С�

    class Team {
      String name
      Person coach
      players = []
    }
    
    class Person {
      String name
    }

    p = new Person(name:'Mike Martz')
    t = new Team(name:'Rams', coach:p)

    // ���ιԤϡ�team.getCoach().getName ��Ʊ����̤���Ϥ���
    println "coach = ${t.coach.name}"

    t = new Team(name:'Blues')

    // ���ιԤ� null ���֤��Τ�����
    // NullPointerException ��ȯ�����ʤ�
    println "coach = ${t->coach->name}"

    // ���ιԤ� NullPointerException ��ȯ������
    println "coach = ${t.coach.name}"

Groovy �ʥ�ե쥯�����

���륪�֥������Ȥ� Class ���֥������Ȥ�������������ˡ�Java �Ǥ� someObject.getClass() �Ƚ񤯡�Groovy ��Ʊ�����Ȥ�Ԥ��ˤϡ�someObject.class �Ƚ񤯡�

���饹̾���� Class ���֥������Ȥ�������������ϡ�Java �Ǥ� Groovy �Ǥ� SomeClass.class �ޤ��� Class.forName("pkg.SomeClass") �Ƚ񤯡�

Groovy �� GString ���饹�Υ᥽�å�̾�����ɽ����������С����Τ褦�˽񤯡�

    GString.class.methods.each { println it.name }

Java �� java.util.List ���󥿥ե������Υ᥽�å�̾�����ɽ����������С����Τ褦�˽񤯡�

    java.util.List.class.methods.each { println it.name }

̤�����᥽�åɤ򥭥�å�����

���饹�ˤϡ�̤�����Υ᥽�åɤ��Ф���ƤӽФ��򥭥�å����륳���ɤ�񤯤��Ȥ��Ǥ��롣���Ȥ��С�

    o = new CatchCall()

    // ���ιԤ� "unknown method Mark called with [19]" ��ɽ������
    println o.foo("Mark", 19)

    class CatchCall {
      invokeMethod(String name, Object args) {
        try {
          return metaClass.invokeMethod(this, name, args)
        } catch (MissingMethodException e) {
          // �����˳μ¤˸ƤӽФ���᥽�å�̾�Ȱ����ǤθƤӽФ���
          // �Ԥ������å���񤤤Ƥ�褤
          return "unknown method ${name} called with ${args}"
        }
      }
    }

Groovy Markup

Groovy Markup �� ��Ҥ� invokeMethod �᥽�åɤ���Ѥ���¸�ߤ��ʤ��᥽�åɤθƤӽФ��򥭥�å����������֥Ρ��ɡפ��Ѵ����롣�᥽�åɤΰ����ϥΡ��ɤ�°���Ȥ��ư����롣�᥽�åɤ��Ϥ��줿����������ϥΡ��ɤΥ���ƥ�ĤȤ��ư����롣Groovy Markup �Ǥ��ͤ��ޤ�����ˡ���Ѱդ���Ƥ���:

����˲ä��ơ��ȼ��Υӥ�����������ˤ� groovy.util.BuilderSupport ���饹��Ѿ�����Ф褤��

HTML ������

MarkupBuilder ����Ѥ��� HTML ���������륵��ץ�򼨤���

    import groovy.xml.MarkupBuilder

    mb = new MarkupBuilder()
    mb.html() {
      head() {
        title("This is my title.")
      }
      body() {
        p("This is my paragraph.")
      }
    }
    println mb[*8]

���줬�������� HTML �ϼ��Τ褦�ˤʤ롣

    <html>
      <head>
        <title>This is my title.</title>
      </head>
      <body>
        <p>This is my paragraph.</p>
      </body>
    </html>

XML������

MarkupBuilder ����Ѥ��� XML ���������륵��ץ�򼨤���

    import groovy.xml.MarkupBuilder;

    mb = new MarkupBuilder()        
    mb.autos() {
      auto(year:2001, color:'blue') {
        make('Toyota')
        model('Camry')
      }
    }
    println mb[*9]

���줬�������� XML �ϼ��Τ褦�ˤʤ롣

    <autos>
      <auto year='2001' color='blue'>
        <make>Toyota</make>
        <model>Camry</model>
      </auto>
    </autos>

[*8]����: mb.html() �᥽�åɤμ¹Ի�����ɸ����Ϥ�HTML�����Ϥ����Τǡ�����ץ����Ū��ͤ���Ȥ��Υ��ơ��ȥ��ȤϾ�Ĺ��MarkupBuilder�μ¹Է�̤�ʸ����Ȥ���mb�����ꤷ�����������Ĥ���ˤ�륵��ץ륳�����򻲾ȡ�
[*9]����: mb.autos() �᥽�åɤμ¹Ի�����ɸ����Ϥ�XML�����Ϥ����Τǡ�����ץ����Ū��ͤ���Ȥ��Υ��ơ��ȥ��ȤϾ�Ĺ��MarkupBuilder�μ¹Է�̤�ʸ����Ȥ���mb�����ꤷ�����������Ĥ���ˤ�륵��ץ륳�����򻲾ȡ�

Groovy SQL

Groovy �� JDBC ���ñ�ˤ��롣groovy.sql.Sql ���饹�ϥ�����μ¹Ԥ� ResultSet �ԤΥ��ƥ졼�Ȥ��ñ�˹Ԥ���ˡ���󶡤��롣���Υ���ץ�Ǥϡ�MusicCollection �ϥǡ����١�����̾��(���ξ��ϡ���Ͽ���줿 ODBC �ǡ���������)�ǡ� Artists ���ǡ����١����Υơ��֥�̾��Name ���ơ��֥�Υ����̾����

    import groovy.sql.Sql

    dbURL = 'jdbc:odbc:MusicCollection'
    jdbcDriver = 'sun.jdbc.odbc.JdbcOdbcDriver'
    sql = Sql.newInstance(dbURL, jdbcDriver)
    sql.eachRow('select * from Artists') {
      println it.Name
    }

Groovlet

Groovlet �� Groovy �ˤ�롢�����֥�åȤ� JSP �����ذƤǤ��롣Groovlet �ϰʲ��ΰ����ѿ����󶡤��롣

Groovlet �Υ���ץ�򼨤������Υ����ɤ� SimpleGroovlet.groovy �ߤ�����̾������¸���롣�ޤ��������ɤ� HTML �ν��Ϥ˥ҥ��ɥ�����Ȥ���Ѥ��Ƥ��롣

    out.println <<<EOS
    <html>
      <head>
        <title>My Simple Groovlet</title>
      </head>
      <body>
        <h1>My Simple Groovlet</h1>
        <p>Today is ${new java.util.Date()}.</p>
      </body>
    </html>
    EOS

GroovyServlet �� Groovlet �򥳥�ѥ��뤷���ե����뤬�ѹ������ޤǥ���å��夹�롣�ƥ���ѥ�����ѹ����˼�ưŪ�˹Ԥ��롣 GroovyServlet �� web.xml ����Ͽ���ʤ���Фʤ�ʤ���

�ʲ��� web.xml �ե�����Υ���ץ������GroovyServlet ����Ͽ��ʬ�������������Ƥ��ʤ���

    <?xml version="1.0"?>
    <!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
      "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
      <servlet>
        <servlet-name>Groovy</servlet-name>
        <servlet-class>groovy.servlet.GroovyServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>Groovy</servlet-name>
        <url-pattern>*.groovy</url-pattern>
      </servlet-mapping>
    </web-app>

Groovlet �Υǥץ����ˤ� Ant ��Ȥ��Τ��ɤ�������������Ū�ʼ���:

  1. �������Ƥ�ޤ� WAR �ե������������롣
    • Groovlet �������ե����� (*.groovy) ��ȥåץ�٥�γ��ؤ�����
    • WEB-INF �ǥ��쥯�ȥ�� web.xml ������
    • groovy*.jar �� asm*.jar �ե������ WEB-INF/lib �ǥ��쥯�ȥ������
  2. WAR �ե�����򥵡��֥�åȥ��󥸥�(Tomcat ��)�˥ǥץ������롣

�����Ԥ������ Ant �ӥ�ɥե�����Ϥ�������

build.properties

    build.dir=build
    src.dir=src

    # Groovlet ���֤���Ƥ���ǥ��쥯�ȥ�
    groovy.dir=${src.dir}/groovy

    # web.xml ���֤���Ƥ���ǥ��쥯�ȥ�
    web.dir=${src.dir}/web

    # WAR �ե������������ѥ�
    war.file=${build.dir}/${ant.project.name}.war

    # WAR �ե�����Υǥץ�����
    webapps.dir=${env.TOMCAT_HOME}/webapps

    # WAR �ե�����˴ޤ��٤� JAR �ե�����
    asm.jar=${env.GROOVY_HOME}/lib/asm-1.4.1.jar
    groovy.jar=${env.GROOVY_HOME}/lib/groovy-1.0-beta-4-snapshot.jar

build.xml

    <project name="GroovletExample" default="deploy">
      <property environment="env"/>
      <property file="build.properties"/>

      <target name="prepare">
        <mkdir dir="${build.dir}"/>
      </target>

      <target name="war" depends="prepare"
        description="creates WAR file">
        <war destfile="${war.file}" webxml="${web.dir}/web.xml">
          <fileset dir="${groovy.dir}"/>
          <lib file="${groovy.jar}"/>
          <lib file="${asm.jar}"/>
        </war>
      </target>

      <target name="deploy" depends="war"
        description="deploys WAR file">
        <delete dir="${webapps.dir}/${ant.project.name}"/>
        <delete file="${webapps.dir}/${war.file}"/>
        <copy file="${war.file}" todir="${webapps.dir}"/>
      </target>

    </project>

����ץ�� Groovlet ���ǥץ������줿�顢�����֥֥饦������ http://localhost:8080/GroovletExamples/SimpleGroovlet.groovy �ǥ��������Ǥ��롣GroovletExample �� Web ���ץꥱ��������̾���ǡ�SimpleGroovylet.groovy �� Groovlet ��̾���������Υޥåԥ󥰤� web.xml ����Ͽ����Ƥ��� GroovyServlet �� url-pattern �ǹԤ��롣

������

Groovy �Ϥޤ������ǤϤʤ���Groovy ������������򸫤�ˤϡ� http://groovy.codehaus.org �˥����������� Issue Tracker �Υ�󥯤򥯥�å�����Ф褤�� �����Ǥϡ���𤵤�Ƥ���������椫�餤���Ĥ���ԥå����åפ��롣 ������Ƥ��Ƥ��������ֹ��ʻ��������

[*10]����: 1.0-beta4 �ǥ��ݡ��Ȥ��줿��
[*11]����: 1.0-rc1 �ǥ��ݡ���ͽ�꤫��
[*12]����: 1.0-beta4 �ǥ��ݡ��Ȥ��줿��
[*13]����: 1.0-rc1 �ǥ��ݡ���ͽ�ꡣ
[*14]����: 1.0-beta4 �ǥ��ݡ��Ȥ��줿��
[*15]����: 1.0�ǽ���꡼���ǥ��ݡ���ͽ�ꡣ
[*16]����: 1.1�ǥ��ݡ���ͽ�ꡣ

�ޤȤ�

�����ܵ����Ǥϡġ� Groovy ��ʸˡ�ȵ�ǽ�Τ����Ĥ��򤶤ä���ή���Ƥߤ��� Groovy ���󶡤��� Java ���硼�ȥ��åȤϡ����ʤ�����������夲������������������ä� Groovy ��ڤ���Ǥߤ����Ȼפä������������������ɤ��ɤߤ䤹���ʤꤽ������������������Ȥ��ɤߤŤ餯�ʤꤽ�����������������ʤ�����Υե����ɥХå���ȤƤ�ڤ��ߤ��Ƥ��롣����[email protected] �˥᡼�뤷���ߤ���[*17]���ޤ����ե����ɥХå��� Groovy �Υ᡼��󥰥ꥹ��(�����˾ܺ٤�����)�Ǥⶦͭ�������Ȼפ���

[*17]����: ���ܸ����˴ؤ���ե����ɥХå��� [email protected] �ؤ��ꤤ���ޤ���

����ʸ��


Copyright ��� 2004. Object Computing, Inc. All rights reserved.
���ܸ���: ��������