Groovyを一度だけ使っておこうと思っていました。
身体もボロボロ、時間もないけれど、(むしろ「だからこそ」)、強引に時間を割り込んで動かしてみました。
まずは、Hello World §
とりあえず、対話モードを提供するgroovyshを使ってHello Worldを実現。
入力した文字は強調してあります。
D:\delme\groovy-1.0-beta-7\bin>set JAVA_HOME=D:\Program Files\Java\jdk1.5.0
D:\delme\groovy-1.0-beta-7\bin>groovysh
Lets get Groovy!
================
Version: 1.0-beta-7 JVM: 1.5.0-b64
Type 'exit' to terminate the shell
Type 'help' for command help
groovy> println "Hello World!"
groovy> go
Hello World!
groovy>
たったこれだけ。実にお手軽ですね。
for each構文 §
なぜいつもサンプルがfor each構文かって?
イテレータの列挙は好きだからです (笑。
とりあえず、シンプルにやってみました。
groovy> [1, 2, 3].each { println it }
groovy> go
1
2
3
問題なく綺麗に行きますね。
あまりに綺麗に行きすぎたので、ネストしたデータを食わせたらどうなるのかと試してみました。
groovy> ["abc","def",[1, 2, 3]].each { println it }
groovy> go
abc
def
[1, 2, 3]
うーん、綺麗に行きすぎ (笑。
確かに、Groovyは良くできていると認めねばなりません。
レンジもあるでよ §
うひょ~、レンジもありですか。
こんなこともできちゃいましたよ。
groovy> (1..5).each { println it }
groovy> go
1
2
3
4
5
しかも、こんなのまでありですか。
これは面白い!
groovy> list=10..20
groovy> println list[2,4]
groovy> go
[12, 14]
ここでlistは、10から20までのレンジを含んでいます。
list[2,4]の構文は、2次元配列へのアクセスではなく、listの2番目と4番目のアイテムを取り出すことを示しています。(たぶん)。
面白すぎますね。
===比較演算子 §
はっきり言って、まとにドキュメント読んでません。
ごく短時間、適当に見ている間に見つけた面白そうなものだけ試しています。
というわけで、ふと目を引いたのは===演算子。イコール記号3個です。
両者の違いを引き出すのに成功した事例を以下に示します。
groovy> println "aa" == "a" + "a"
groovy> go
true
groovy> println "aa" === "a" + "a"
groovy> go
false
==演算子は同値判定。
===は同参照判定、つまり.NET FrameworkのReferenceEquals相当ということのようですね。
Javaの言語仕様の中で一貫性を欠いている使いにくい部分の1つが、値型と参照型で==演算子の意味が変わってしまう点だと思いますが、Groovyは綺麗に乗り越えているようですね。
ますます、Groovyは良くできていると認めねばなりません。
強制中断 §
面白すぎるので、ここで強制中断します。
こんなもので遊んでいたら、仕事になりません (笑い
かなり先入観が裏切られた気分です。良い意味で。
Groovy入門、のような記事の依頼は引き受けても良いかな、と思いました。
(などと書くとあとで苦しむ羽目になりますが)