サンプルを実行してみましょう。
上部「Run」メニューから「Run app」を選択すると、図1の「Select Deployment Target」ダイアログが表示されます。これはアプリをどの環境で実行するかを選択するためのダイアログです。実際のAndroid端末をPCに接続している場合は上部の「Connected Devices」に表示されます。
今回は下部の「Android403」を選択して「OK」ボタンをクリックし、PC上のAndroid Emulatorでアプリを動かします。初回実行時など、Androidのシステムイメージをダウンロードしていない場合は、確認ダイアログが出ますので、ダウンロードしてください。
Android Emulatorの起動後、少しするとアプリがデプロイされ、図2のように「Hello World!」メッセージが表示されます。
自動生成されたKotlinのコードをざっと確認してみましょう。MainActivity.ktの内容はリスト3のようになっています。
package com.example.doi.myapplication import android.support.v7.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } }
先頭のpackage、import文は、末尾のセミコロンがない以外は、Javaとほぼ同様の内容です。クラス定義にclassキーワードを使うのは同じですが、継承にextendsキーワードを使うJavaと異なり、コロンを使って継承元クラスであるAppCompatActivityを指定しているのが特徴です。とはいえ、C++やC#などの書き方と同様ですので、それほどとっぴな書き方ではありませんね。
その後はfunキーワードでonCreateメソッドを定義しています。このメソッドにはoverrideが付いているので、AppCompatActivityクラスのonCreateメソッドをオーバーライドしています。メソッドの中身は、セミコロンがない以外はJavaとほぼ同じコードですね。
先ほどはコマンドライン用アプリのソースコードをざっと見ましたが、Androidアプリ用コードについても、Java開発者にとってあまり違和感のないコードになっていることが分かるでしょう。
次に、画面上にボタンを配置し、Kotlinでイベントハンドラを書いてみましょう。「activity_main.xml」タブをクリックすると、図13のようなレイアウト画面とツールバーが表示されます。
ツールバーから「Button」をドラッグ&ドロップで画面上に配置し、右の「Attributes」ペインの「text」プロパティを「Click me!」に書き換えましょう(図14)。
メッセージ表示用に、もともと配置されているTextViewのIDプロパティに「myLabel」を設定して参照できるようにします(図15)。
続いてイベントハンドラを記述します。「MainActivity.kt」タブをクリックし、onCreateメソッド内をリスト4のように書き換えます。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //表示用TextViewインスタンスを取得 val textView = findViewById<TextView>(R.id.myLabel) as TextView //ボタンインスタンスを取得 val button = findViewById<Button>(R.id.button) //ボタンのイベントハンドラを設定 button.setOnClickListener { v -> textView.text = "Clicked !" } }
配置したビューを取得するためのfindViewByIdメソッドなどは、JavaでのAndroid開発でも多用されるものですが、イベントハンドラの設定方法はJavaとは全く異なる書き方になっています。詳細は次回以降に解説します。
書き換え後、実行してボタンをクリックすると、図16のようにTextViewが書き換わることを確認できます。
JavaでAndroid開発経験をお持ちの方には、これだけのコードでイベントハンドラが書けるというのは驚きかもしれません。Javaであれば例えばリスト5のようなコードになることでしょう。
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //イベントハンドラ本体を記述する } });
Kotlinに比べるとやや複雑ですが、これでも無名クラスを使ったJavaとしては簡略化した書き方です。元来は「View.OnClickListenerインタフェースを実装したクラスを別途(ないしは自分自身に実装して)用意し、イベントハンドラとしてそのインスタンスを渡す」といったコードになるはずです。Javaに比べて、ぐっと簡略化されたKotlinのコードに魅力を感じる方も少なくないことでしょう。
このように本連載では、Kotlin言語のさまざまな特徴を解説していきます。上記コードのように、Android開発においても有用な言語機能が幾つも組み込まれていますので、どうぞご期待ください。また本稿では、Kotlinの特徴について、ざっと目に付くところだけ挙げましたが、その他にも「when」という見慣れないキーワードや、ラムダ式などの機能も注目株でしょう。次回以降の言語機能解説をお楽しみに。
Copyright © ITmedia, Inc. All Rights Reserved.