| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
342 バイト追加 、 2020年2月16日 (日) 04:26
編集の要約なし
==[[Groovy]]==[[Gradle]] |
{{amazon|4774147273}}
==概要==
*JVM上で動作する
*Javaと直接的な連携が特徴 [[Java]]と直接的な連携が特徴 *動的言語であり直接スクリプトを実行できる 動的[[言語]]であり直接スクリプトを実行できる *バイトコードがメモリ上に直接生成される(中間的にJavaソースは生成されない中間的に[[Java]]ソースは生成されない)
*groovycでクラスファイルも作成可能
*groovyコマンドで実行できる
====実行する====
>>groovy scriptname.groovy
====バインディング変数====
*型もdefも使用しない
*publicクラス定義を含むファイル名はクラスメイト一致する必要はない
*デフォルトでpublicアクセス
*以下のようなクラスを定義したGroovyファイルは実行される以下のようなクラスを定義した[[Groovy]]ファイルは実行される
**mainメソッドを持つクラス
**JUnitなどのテストケース
**Runnable実装クラス[[R]]unnable実装クラス
====メソッドとコンストラクタ====
*Mapで引数と受け取ることで名前付き引数の利用が可能
"i am ${name}, ${age} years old."
}
def changeProfilechange[[Profile]](name='foo',age=1){
this.name=name
this.age = age
def p = new Person(name:'yagi',age:45)
println p.profile()
p.changeProfilechange[[Profile]]()
println p
}
}
> > groovy .\Person.groovy
i am yagi, 45 years old.
i am foo, 1 years old.
===GroovyBeans[[Groovy]]Beans===
====ゲッター、セッターの自動生成====
*フィールドのアクセッサが自動生成される
println "${bean.name},${bean.address},${bean.age},${bean.profAge}"
> > groovy .\GroovyBeans[[Groovy]]Beans.groovy
yagi,AICH,45,40
===プロパティ、フィールド、メソッド参照===
println '6.' + s.getProperty(propName)
> > groovy .\PropertyMethod.groovy
1.Sample
2.Sample
println '2.' + bean."${methodName}"()
> > groovy .\PropertyMethod.groovy
1.method
2.method
*obj.metaClass.methods
groovy:000> > f = new File(/c:\work/) ===> > c:\work groovy:000> > f.properties ===> > [directory:true, canonicalFile:C:\work, file:false, freeSpace:80082784256, invalid:false, canonicalPath:C:\work, usableSpace
:80082784256, hidden:false, totalSpace:217750581248, path:c:\work, name:work, prefixLength:3, absolute:true, class:class java.io.
File, parentFile:c:\, absolutePath:c:\work, parent:c:\, absoluteFile:c:\work]
groovy:000> > f.metaClass.methods ===> > [public boolean java.lang.Object.equals(java.lang.Object), public final native java.lang.Class java.lang.Object.getClass(),
public native int java.lang.Object.hashCode(), public final native void java.lang.Object.notify(), public final native void java.
lang.Object.notifyAll(), public java.lang.String java.lang.Object.toString(), public final void java.lang.Object.wait() throws ja
:
*obj.metaClass.methods.name.sort().unique()
groovy:000> > f.metaClass.methods.name.sort().unique() ===> > [canExecute, canRead, canWrite, compareTo, createNewFile, createTempFile, delete, deleteOnExit, equals, exists, getAbsoluteF
ile, getAbsolutePath, getCanonicalFile, getCanonicalPath, getClass, getFreeSpace, getName, getParent, getParentFile, getPath, get
TotalSpace, getUsableSpace, hashCode, isAbsolute, isDirectory, isFile, isHidden, lastModified, length, list, listFiles, listRootslist[[R]]oots , mkdir, mkdirs, notify, notifyAll, renameTo, setExecutable, setLastModified, setReadOnlyset[[R]]eadOnly, setReadableset[[R]]eadable, setWritable, toPath, toSt ring, toURItoU[[R]]I, toURLtoU[[R]]L, wait]
===データ型===
====型指定を省略できる====
println i.class.name
> > groovy .\DataType.groovy
java.lang.Integer
====真偽値の扱い====
|-
|文字列
|長さ>>0
|長さ0
|-
println map
> > groovy .\DataType.groovy
[1:one, 2:two]
====数値型の扱い====
println c.class.name
> > groovy .\DataType.groovy
java.lang.Integer
java.math.BigDecimal
*GString
**ダブルクオート、スラッシュで囲った定数中の「$変数名」[${式}」を実行時に展開する
*シングルクオートは、Javaの文字列と同義シングルクオートは、[[Java]]の文字列と同義
*/~/ \をエスケープ文字として扱わない、GStringを展開する
*ダブル、シングルクオートをそれぞれ3つで囲む、$/~/$と複数行
> > groovy .\Strings.groovy
1.123,246
2.$num,${num*2}
6.c:\work
c:\work\test
===[[クロージャ]]===
*生成時のコンテキストを含んだコードブロック
**クロージャが生成された場所で可視である変数を参照、変更可能[[クロージャ]]が生成された場所で可視である変数を参照、変更可能
*{~}で囲んだコードとして表記
c();
> > groovy .\ClosureSample.groovy
hello,Sat Mar 04 18:21:42 JST 2017
====->>を使って引数を与えることができる====*仮引数を指定しないと、引数を取らないクロージャとなる仮引数を指定しないと、引数を取らない[[クロージャ]]となる
c = {
msg ->>
def d = new Date()
println "$msg,$d"
c('hello');
> > groovy .\ClosureSample.groovy
hello,Sat Mar 04 22:32:58 JST 2017
====制御構造として利用====
}
> > groovy .\ClosureSample.groovy
1,2,3,4,5,6,7,8,9,10,
====リソース開放やクローズ====
*http://docs.groovy-lang.org/latest/html/documentation/working-with-io.html
new File(/C:\Users\piroto\workspace\vscode\groovy_lesson\ClosureSample.groovy/).withReader with[[R]]eader { reader -> >
reader.each{
println it
}
> > groovy .\ClosureSample.groovy new File(/C:\Users\piroto\workspace\vscode\groovy_lesson\ClosureSample.groovy/).withReader with[[R]]eader { reader ->>
reader.each{
println it
println even
> > groovy .\ClosureSample.groovy
[2, 4, 6, 8, 10]
=====collect=====
println square
> > groovy .\ClosureSample.groovy
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
===コレクション型===
====範囲====
println (1..5)
println (1 ..< &lt; 5)
 > &gt; groovy .\CollectionSample.groovy
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
println list * 2
println list
println list << &lt;&lt; [9,10]
println list
> &gt; groovy .\CollectionSample.groovy
1
5
println map."$key"
> &gt; groovy .\CollectionSample.groovy
[1:a, 2:b, 3:c]
a
|-
|.&
|メソッドをクロージャとして参照メソッドを[[クロージャ]]として参照
|-
|.@
|フィールド/属性値を推定
|-
|<&lt;=>&gt;
|大小比較
|-
|範囲の生成(閉区間)
|-
|..<&lt;
|範囲の生成(半開区間)
|-
|-
|==~
|正規表現マッチ[[正規表現]]マッチ
|-
|=~
println cc.class.name
> &gt; groovy .\OperatorSample.groovy
=== ?. ===
null
java.lang.String
java.lang.Character
====その他の演算子[[その他]]の演算子====
*== は、equals() 同じ意味
*javaでの==は、Object#is()を利用
====マルチ代入====
groovy:000> &gt; l = [1,2,3] ===> &gt; [1, 2, 3] groovy:000>&gt; groovy:000> &gt; (a,b,c) = l ===> &gt; [1, 2, 3] groovy:000> &gt; a ===> &gt; 1 groovy:000> &gt; b ===> &gt; 2 groovy:000> &gt; c ===> &gt; 3
===制御構造===
====switch-case文====
====for文====
*通常のforおよび拡張forが利用できる
for (i=0; i<&lt;10; i++) {} for (int i: 0 ..<&lt;10) {}
* in の利用が可能
for (i in 0..10){}
====return文====
*return 直後に関数やクロージャ末尾に到達することが確実である場合、省略可能直後に関数や[[クロージャ]]末尾に到達することが確実である場合、省略可能
===例外処理===
*catchする例外の型を省略した場合、java.lang.Exception をcatchしているのと同じ
*チェック例外を明示的に処理しなくともよい
===[[正規表現]]===
*==~文字列全体にマッチするか
*=~ パターンにマッチする部分が含まれるか(Matcherオブジェクトを生成)
println (( 'pppiroto@gmail.com' =~ /[a-z]+/ )?"found":"not found")
> &gt; groovy .\RegexSample[[R]]egexSample.groovy
true
false
====後方参照、補足グループ====
( 'pppiroto@gmail.com' =~ /([a-z])+@([a-z]+\.[a-z])+/ ).each{
g0, g1, g2 ->&gt;
println "id=$g1,host=$g2,addr=$g0"
}
}
> &gt; groovy .\RegexSample[[R]]egexSample.groovy
id=o,host=gmail.c,addr=pppiroto@gmail.c
pppiroto
gmail
com
==[[Groovy ]] API==
*http://docs.groovy-lang.org/latest/html/gapi/
===ビルダー===
=====[[XML]]=====
*http://www.ibm.com/developerworks/jp/java/library/j-pg05199/
import groovy.xml.MarkupBuilder
println sw
> &gt; groovy .\XmlBuilderSample.groovy <&lt;Book>&gt; <&lt;Book type='book'>&gt; <&lt;Author>&gt;Hoge<&lt;/Author>&gt; <&lt;Price>&gt;1000<&lt;/Price>&gt; <&lt;/Book>&gt; <&lt;/Book>&gt;==[[Groovy ]] JDK (GDK)==

案内メニュー