Macにgroovyをインストールする
MacでGradleを勉強するためにgroovyをインストールしました。
ターミナルで
curl -s "https://get.sdkman.io" | bash
と入力し、実行します。
完了したら、新しいターミナルで
source "/Users/takahashi/.sdkman/bin/sdkman-init.sh"
と入力します。(各環境に合わせて修正してください)
最後に
sdk install groovy
でインストール完了です。
GroovyConsoleを起動する
groovyをインストールしたら、GroovyConsoleを起動します。
groovyConsole &
で以下が起動できます。
groovyConsole上でプログラムを記述することができます。
def a = "hello" // String型に暗黙型変換 println a
上記コードを書いて、command + rでプログラムが実行されます。
def
変数宣言の際に使用します。defは型指定が行われない(暗黙型変換される)のでコードを書くときはdefより明示的に型指定して変数宣言する方が望ましいです。
groovyはJavaと同じ型が使用できるのでJava経験者ならわかりやすい言語だと思います。
String a = "hello" println a
if文
groovyはif文が書けます。
String a = "hello" if (a == "hello") { println a } else if (a == "test"){ println "test" } else { println "other" }
for文
groovyでは色々なfor文が用意されています。
List<Integer> list =[0,1,2] for(int i=0;i<list.size();i++){ println list[i] }
上記コードはリストをループしています。
リストの場合はforの代わりにeachを使用することができます。
List<Integer> list =[0,1,2] list.each{ println it }
eachではitと言う変数が用意されており、itに値が入っていきます。
itを使用しない場合は以下のように記述します。
List<Integer> list =[0,1,2] // 型省略 list.each{value -> println value } // 型指定 list.each{Integer value -> println value }
foreach文
foreachも使えます。
List<Integer> list =[0,1,2] for (i in list){ println i }
times
数値に対してループすることができます。
5.times{ print it // 01234 }
switch文
switch文が使えます。
def s = 3; switch(s) { case 's': println s break case 0..10: println s break default: println 'default'; }
Range
範囲オブジェクトと言うRangeを作成することができます。
1..3 → 1から3を表すオブジェクト
1…3→ 1から2を表すオブジェクト
“a”..”c”→ aからcを表すオブジェクト
Rangeは以下のようにループすることができます。
1..3.each{ print it // 3 } (1..3).each{ print it // 123 }
カッコをつけないと意図する結果にならないので注意です。範囲オブジェクトを変数に代入すればカッコは不要です。
def a = 1..3; a.each{ print it // 123 }
リストのcollectメソッド
リストにはcollectメソッドが用意されています。このメソッドを使用すると各要素を順番に処理することができます。戻り値があります。
List<Integer> list =[0,1,2] List<Integer> list2 = list.collect{ it * 2} for(i in list2){ println(i) // 0 2 4となる }
リストのinjectメソッド
JSで言うreduceみたいなメソッドです。
各要素を次々処理するメソッドで以下は合計を算出します。
List<Integer> list = [1,2,3] def ret = list.inject{x,y -> x + y } println ret // 6
リストのfindメソッド
リスト内の条件に合致する要素の一番最初の要素を返します。
List<Integer> list = [1,2,3,4] def ret = list.find{ it > 3 } println ret // 4
リストのfindAllメソッド
リスト内の条件に合致する要素のリストを返します。
List<Integer> list = [1,2,3,4] def ret = list.findAll{ it > 2 } println ret // [3,4]
リストのmax/minメソッド
リスト内の最大値、もしくは最小値を返します。
List<Integer> list = [1,2,3,4] def ret = list.max() println ret // 4 ret = list.min() println ret // 1
リストにリストを追加する
リストにリストを追加するには+でリストを連結するだけです。
List<Integer> list1 = ['a','b','c','d'] List<Integer> list2 = [1,2,3] println list1 + list2 // [a,b,c,d,1,2,3]
リストから特定のリストを削除する場合はマイナスを使用します。
List<Integer> list1 = ['a','b','c','d'] List<Integer> list2 = ['a','c'] println list1 - list2 // [b,d]
コメント文
groovyのコメントはJavaと同じです。
//で、その行の末尾までコメントアウトします。
/* 〜 */で複数行コメントアウトできます。
String
GroovyのStringはダブルクオーテーションで囲むと${}の置換変数を展開することができます。
このStringはgroovy.lang.GString型になりますが、必要に応じてjava.lang.Stringに強制的に変換されます。
def age = 10 String str = "${age}" + "歳" println str
Bean
Groovyではクラス定義ができます。Javaのようにgetter/setterを記述する必要がなく、lombokを使用する必要もありません。フィールドをprivateにしなければgetter/setterが自動的に用意されます。
class Sample{ Integer id; String name; } s = new Sample(id:1,name:'takahashi'); // 引数付きコンストラクタ println s.getName() // takahashi
マップを定義する
Groovyではマップが定義できます。java.util.HashMapに当たります。
リストと記述方法は似ていますが、key:valueで記述します。
def map = ['key1':'value1','key2':'value2'] for(a in map) { println a.key } // key1 // key2
build.gradle
Spring BootでGradleプロジェクトを作成するとデフォルトでbuild.gradleファイルが配置されます。
このファイルはgroovyベースで記述されており、多少はgroovy言語を知っていないと困ることがあります。ここではbuild.gradleで使うことがある文法を紹介します。
buildscriptブロック
buildscriptブロックはビルドスクリプト自体が依存しているライブラリを指定するブロックです。
extブロックは変数を定義するブロックとなります。
dependenciesブロックで${変数名}で変数展開することができます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
buildscript { | |
ext { | |
junit5Version = = '5.6.0' | |
} | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
classpath 'org.junit.platform:junit-platform-gradle-plugin:${junit5Version}' | |
} | |
} |
apply plugin
Groovyプラグインを使う場合にapply plugin:java
というように記述します。
javaはコンパイルなどに必要なプラグインとなります。
以下のように纏めてプラグインを書くこともできます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
plugins { | |
id 'org.springframework.boot' version '2.2.4.RELEASE' | |
id 'io.spring.dependency-management' version '1.0.9.RELEASE' | |
id 'java' | |
} |
以下サイトに標準で用意されているプラグイン一覧の記載があります。pmdなども入っています。
sourceSetsブロック
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント