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

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
124 バイト追加 、 2020年2月16日 (日) 04:26
編集の要約なし
==[[Groovy]]==
[[Gradle]] |
{{amazon|4774147273}}
==概要==
*JVM上で動作する
*Javaと直接的な連携が特徴 [[Java]]と直接的な連携が特徴 *動的言語であり直接スクリプトを実行できる 動的[[言語]]であり直接スクリプトを実行できる *バイトコードがメモリ上に直接生成される(中間的にJavaソースは生成されない中間的に[[Java]]ソースは生成されない)
*groovycでクラスファイルも作成可能
*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
}
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
===プロパティ、フィールド、メソッド参照===
===> [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]
===データ型===
====型指定を省略できる====
*GString
**ダブルクオート、スラッシュで囲った定数中の「$変数名」[${式}」を実行時に展開する
*シングルクオートは、Javaの文字列と同義シングルクオートは、[[Java]]の文字列と同義
*/~/ \をエスケープ文字として扱わない、GStringを展開する
*ダブル、シングルクオートをそれぞれ3つで囲む、$/~/$と複数行
6.c:\work
c:\work\test
===[[クロージャ]]===
*生成時のコンテキストを含んだコードブロック
**クロージャが生成された場所で可視である変数を参照、変更可能[[クロージャ]]が生成された場所で可視である変数を参照、変更可能
*{~}で囲んだコードとして表記
====->を使って引数を与えることができる====
*仮引数を指定しないと、引数を取らないクロージャとなる仮引数を指定しないと、引数を取らない[[クロージャ]]となる
c = {
msg ->
====リソース開放やクローズ====
*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{
> groovy .\ClosureSample.groovy
new File(/C:\Users\piroto\workspace\vscode\groovy_lesson\ClosureSample.groovy/).withReader with[[R]]eader {
reader ->
reader.each{
|-
|.&
|メソッドをクロージャとして参照メソッドを[[クロージャ]]として参照
|-
|.@
|-
|==~
|正規表現マッチ[[正規表現]]マッチ
|-
|=~
java.lang.String
java.lang.Character
====その他の演算子[[その他]]の演算子====
*== は、equals() 同じ意味
*javaでの==は、Object#is()を利用
for (i in 0..10){}
====return文====
*return 直後に関数やクロージャ末尾に到達することが確実である場合、省略可能直後に関数や[[クロージャ]]末尾に到達することが確実である場合、省略可能
===例外処理===
*catchする例外の型を省略した場合、java.lang.Exception をcatchしているのと同じ
*チェック例外を明示的に処理しなくともよい
===[[正規表現]]===
*==~文字列全体にマッチするか
*=~ パターンにマッチする部分が含まれるか(Matcherオブジェクトを生成)
println (( 'pppiroto@gmail.com' =~ /[a-z]+/ )?"found":"not found")
> groovy .\RegexSample[[R]]egexSample.groovy
true
false
}
> 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
</Book>
</Book>
==[[Groovy ]] JDK (GDK)==

案内メニュー