30分でわかる(かも知れない)Groovy超入門! (2/5)
作成:2013-09-28 10:40
更新:2013-11-08 11:01
更新:2013-11-08 11:01
■値と変数の基本
では、具体的な文法について説明していきましょう。まずは、値と変数からです。
Groovyでは、変数はさまざまな形で宣言することができます。整理するとざっと以下の3通りが基本と考えていいでしょう。
この内、型名をつけて宣言する(2番目のスタイル)Javaと同じやり方と、それ以外のものとでは明確な違いがあります。それは、「型を指定しない場合、どんな型の値も代入できるが、型を指定するとその型の値しか代入できない」という点です。
Groovyの変数はダイナミックで、どんな変数にも、どんな型の値でも入れることができます。が、「型が自由」というのは、トラブルにもつながりがちです。そこで「この変数はきっちり型を指定したほうがいい」というときはJavaと同じように型指定できるようになっています。また値の型は、基本的にJavaとほぼ同じと考えてかまいません。
Groovyの値の中でちょっと特徴があるのがString(文字列)です。Javaでは+記号で文字列の連結ができましたが、Groovyでは更に「*」で文字列を掛け算できます。
また、Groovyの文字列リテラルは2種類あります。ダブルクォートとシングルクォートです。これらは、変数の埋め込みができるかどうかという違いがあります。
なお、ここでは変数を埋め込んでいるだけですが、基本的にテキスト値として取り出されるものであればどんな文も${……}という形で埋め込むことができます。例えば、"answer:${x+y}"とすれば、X + yの結果を文字列の中に埋め込んだりできるわけです。
Groovyを使って「これはJavaより便利!」と実感するのは、配列です。Groovyでは、配列は[]記号を使って記述します。こんな具合です。
Groovyでは、配列には必ずしも同じ型の値しか入れられないわけではありません。こんな具合にさまざまな値をまとめることができます。書き方もシンプルですね。更には、Groovyの配列は、+や―によって要素を足したり引いたりできるのです。
また、インデックス番号の代わりにラベルを付けて管理する連想配列は、Javaの場合Mapクラスを使いますが、Groovyではシンプルに記述できます。
こんな感じですね。これで、map["label"]というように、ラベルの名前を指定して値をやりとりすることができるようになります。
※GroovyではList, Range, Mapが標準である
配列や連想配列は、JavaのようにListやMapといったクラスとして用意するのではなく、標準の言語仕様として組み込まれています。また範囲を扱うRangeというのも標準化されています。
この「List, Range, Mapが言語仕様として用意されている」というのはGroovyのおおきなとくちょうでしょう。これらはリテラルとして記述することもできますし、扱いもJavaなどよりはずっと簡単です。
Groovyでは、変数はさまざまな形で宣言することができます。整理するとざっと以下の3通りが基本と考えていいでしょう。
x = 10 // 代入するだけ
int y = 20 // Javaと同じ
def z = 30 // 「def」で定義
この内、型名をつけて宣言する(2番目のスタイル)Javaと同じやり方と、それ以外のものとでは明確な違いがあります。それは、「型を指定しない場合、どんな型の値も代入できるが、型を指定するとその型の値しか代入できない」という点です。
Groovyの変数はダイナミックで、どんな変数にも、どんな型の値でも入れることができます。が、「型が自由」というのは、トラブルにもつながりがちです。そこで「この変数はきっちり型を指定したほうがいい」というときはJavaと同じように型指定できるようになっています。また値の型は、基本的にJavaとほぼ同じと考えてかまいません。
■Javaとはちょっと違うStringリテラル
Groovyの値の中でちょっと特徴があるのがString(文字列)です。Javaでは+記号で文字列の連結ができましたが、Groovyでは更に「*」で文字列を掛け算できます。
def x = "A" * 3例えばこんな具合に実行すると、変数xには"AAA"という文字列が入ります。掛け算した回数だけ文字列が繰り返し繋げられるのです。
また、Groovyの文字列リテラルは2種類あります。ダブルクォートとシングルクォートです。これらは、変数の埋め込みができるかどうかという違いがあります。
def x = "Hello!"例えば、こんな具合に実行してみると、s1は「Yamada.Hello!」と表示され、s2は「Tanaka.$x」と表示されます。s1では、$xという部分に変数xの値が嵌めこまれていることがわかります。こんな具合に、ダブルクォートのリテラルでは、変数を「$○○」あるいは「${○○}」といった形で埋め込んで記述できます。シングルクォートの場合、リテラルはすべてそのまま(変数を評価せず)扱われます。
def s1 = "Yamada.$x"
def s2 = 'Tanaka.$x'
println(s1)
println(s2)
なお、ここでは変数を埋め込んでいるだけですが、基本的にテキスト値として取り出されるものであればどんな文も${……}という形で埋め込むことができます。例えば、"answer:${x+y}"とすれば、X + yの結果を文字列の中に埋め込んだりできるわけです。
■配列はかなり柔軟!
Groovyを使って「これはJavaより便利!」と実感するのは、配列です。Groovyでは、配列は[]記号を使って記述します。こんな具合です。
def arr = ["hello", 123, true]
Groovyでは、配列には必ずしも同じ型の値しか入れられないわけではありません。こんな具合にさまざまな値をまとめることができます。書き方もシンプルですね。更には、Groovyの配列は、+や―によって要素を足したり引いたりできるのです。
def arr = ["hello",123,true]ここでは、["hello",123,true]という要素を持つ配列に"bye"を足し、更に[123,true]を引いています。すると残る配列の中身は["hello","bye"]となるわけです。恐ろしく簡単に中身を操作できることがわかりますね!
arr += "bye"
arr -= [123,true]
for(n in arr){
println(n)
}
■連想配列もある!
また、インデックス番号の代わりにラベルを付けて管理する連想配列は、Javaの場合Mapクラスを使いますが、Groovyではシンプルに記述できます。
[ラベル:値 , ラベル:値, ……]
こんな感じですね。これで、map["label"]というように、ラベルの名前を指定して値をやりとりすることができるようになります。
※GroovyではList, Range, Mapが標準である
配列や連想配列は、JavaのようにListやMapといったクラスとして用意するのではなく、標準の言語仕様として組み込まれています。また範囲を扱うRangeというのも標準化されています。
この「List, Range, Mapが言語仕様として用意されている」というのはGroovyのおおきなとくちょうでしょう。これらはリテラルとして記述することもできますし、扱いもJavaなどよりはずっと簡単です。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※文字列リテラルの例 def x = "Hello!" def s1 = "Yamada.$x" def s2 = 'Tanaka.$x' println(s1) println(s2) ※配列の例 def arr = ["hello",123,true] arr += "bye" arr -= [123,true] for(n in arr){ println(n) }
※関連コンテンツ