Groovyって?
GroovyとはJVM上で動作するスクリプト言語のことです。RubyやPythonなどの軽量プラグラミング言語と同じように
簡潔な記述でコードを書くことがきます。最近のプログラム言語の特徴である関数型プログラミングやメタプログラミング
などの機能も有しています。一番の特徴はJavaとの親和性です。GroovyではJavaとの高い互換性を持っており、
JavaのコードをそのままGroovyのコードして使うことが出来ます。GroovyではJavaコードを記述するよりかは
はるかに短いコードで読みやすく記述することができます。
Groovyが使われている身近な例としてはAndroid Stuidで使われているビルドシステムのGradleがGroovyで書かれています。
Groovy2.4からAndroid正式サポートすることになりました。Apple社もiOS向けプログラミング言語にObjective-Cに替わる
軽量言語Swiftをリリースしたのと、同時期にGroovyサポートを発表しています。とても興味深いですね。
Android StuidoでGroovyを使えるように設定
Android Stuid 1.1の前提で説明します。
1. build.gradleの変更
build.gradleファイルはProject用とModule用の2つあります。まずはProjectのbuild.gradleのdependenciesに
gradle-groovy-android-plugin:0.3.5 を追加します。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:1.0.1"
classpath "org.codehaus.groovy:gradle-groovy-android-plugin:0.3.5"
}
}
allprojects {
repositories {
jcenter()
}
}
次にModule用のbuild.gradleを編集します。apply plugin: ‘groovyx.grooid.groovy-android’の追加とcompileの依存関係にgroovy2.4の記述を付け足します。
apply plugin: "com.android.application"
android { compileSdkVersion 21
buildToolsVersion "21.1.2"'
defaultConfig {
applicationId "lighthousew5.com.groovytest"
minSdkVersion 19
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro"
}
}
}
apply plugin: "groovyx.grooid.groovy-android&"
ependencies {
compile fileTree(dir: "libs", include: ["*.jar"])
compile "com.android.support:appcompat-v7:21.0.3"
compile "org.codehaus.groovy:groovy:2.4.0:grooid" }
以上で設定完了です。
ActivityクラスをGroovy化してみる
JavaのプログラムをGroovy化する前にソースフォルダーを scr/java → src/groovyへ変更します。
MainActivityクラスの拡張子を「.groovy」に変更します。Groovyコードを記述するこができます。
ListViewに文字列配列をデータとして表示するコードをサンプルとします。以下のような記述になります。
def products = ["Apple","Orange","Melon","Lemon"]
def adapter = new ArrayAdapter<String>((this,android.R.layout.simple_list_item_1,products);
def listView = (ListView)findViewById(R.id.listView)
listView.onItemClickListener = {
AdapterView<?> parent, View view, int position, long id ->
def message = (String)parent.getItemAtPosition(position);
Toast.makeText(this,message,Toast.LENGTH_LONG).show();
}
listView.adapter = adapter;
動的な型変換、クロージャー、などGroovyの特徴を活かせば簡潔に記述できます。
swiftに似ているとも言われてます。