Groovy!!!!!!!
これは「G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2015」の17日目の投稿です。
本投稿は、おまけ・まとめ的な立ち位置でアドベントカレンダーのメインは、小技を紹介している4投稿です。
はじめに
本投稿では、Javaプログラマの方向けに、種々の便利ユーテリティのコードや、使い捨てのちょっとしたコードでプログラミング言語Groovyを使う良さを紹介します。
本投稿とは別に4投稿ほど用意しました。一個ずつは短いですが、実際に利用できるも場面もあると思います。(これらがアドベントカレンダーのメインです)
- 【Groovy】iOS・Androidの各種サイズの一時的なアイコンを作る【小人さんスクリプト】
- 【Groovy】各種サイズ・色を組み合わせてプレースホルダ画像を用意する【小人さんスクリプト】
- 【Groovy】ファイル名を規則に従って一括変換する【小人さんスクリプト】
- 【Groovy】特定ユーザーのQiitaの記事を全てダウンロードする【小人さんスクリプト】
また該当する文法や良さは昨年のアドベントカレンダー「【初心者でも】やろうぜGroovy!〜ファイル読み書きしたり、Web APIたたいたり、レスポンスの中身確認したり〜編【今すぐ使える】」でも紹介していますので、こちらも合わせてごらんください。
それからこちらの「Java開発の強力な相棒として今すぐ使えるGroovy」というYasuharu Nakanoさんのスライドが、コードも交えてGroovyの良さを紹介されているのでこちらを読むことをお勧めします!
そして本当に勉強したくなったら、プログラミングGROOVYを買うことをお勧めします!
ほんの一例
ちなみにGroovyを使うと画像のダウンロード、一行でかけます!すごくないですか?
new File(fileName) << new URL(imageUrl).openStream()
ここが素敵だと思うぜGroovy!
Groovyの特徴として次の2点が挙げられることが多いと思います。
- 構文も含め、きわめて高いJavaとの親和性を持つ
- 非常に直感的で簡潔な記述が可能
これらがそのまま「Javaプログラマの方が、小人さんスクリプト・使い捨ての便利コードでGroovyを使うべき理由」にもなると思います。
そしてもっと詳しく述べると、自分がJavaプログラマの方向けに、小人さんスクリプト・使い捨ての処理のコードにGroovyをお勧めするのは次のような理由です。
- スクリプトが書けるので、クラスやメソッドを書かなくても、いきなりやりたい処理のコードを書くことができる
- Java7までのコードはほぼGroovyのコードとして利用できるため、各種処理のコードスニペットがコピペでほぼ動く
- @Grabで使い慣れたJavaのライブラリがすぐに利用できる
- GStringが便利、読みやすい!(+文字列連結したり、StringBuilderでペチペチしなくていい)
- GroovyShellでインタラクティブにコードを試せる
- マップやリストの生成が専用リテラルにより非常に簡潔にできる
- 便利な演算子で記述が簡潔になる
- Javaの既存のクラスに便利なメソッドが追加されている
- JSONのパースが簡単・簡潔
- JSONを作るのも簡単・簡潔
- assertが強力、なにが違うかとっても見やすい
- トリプル「ダブルクォーテーション」で、改行込みの文字列記述も楽々
- 暗黙引数itで簡潔に書けるクロージャ(関数オブジェクト)
- @Cannonical等で、equals、hashCode、toStringが簡潔に実装でき、コード幅も取らない
- 正規表現のクラスを扱いやすくするための演算子がある
- チェック例外を非チェック例外扱いにできる
- defキーワードで型名を書かない
- get、setなどのメソッドがプロパティ形式でアクセスできる
- マップの要素やJSONの要素にもプロパティ形式でアクセスできる
- デフォルトでインポートされているパッケージがJavaより多く、import文も少なくて済む
- Stream APIより簡潔に記述できるコレクションのためのGDK メソッド群
「チェック例外を非チェック例外にするのってどうなの?」とか「型名を書かないってどうなの?」って思った方もいらっしゃるとは思いますが、ちょっとした使い捨てのコードを書いている時には、「チェック例外を非チェック例外」にするのも「def」も非常に有用だと私は思います。
さいごに
「使い捨てスクリプト」「ちょっとした便利コード」に絞ったため、上記の理由をあげました。短い・読みやすいGroovy素敵ですね!
あと「他の言語じゃだめなの」っていう方、別に他の言語にチャレンジするのも素敵だと思うしいいと思いますよ!