Kotlinとは――読み方、メリット、「Java」とのコード比較、実行までのチュートリアルAndroid Studioで始めるKotlin入門(1)(3/3 ページ)

» 2017年12月11日 05時00分 公開
前のページへ 1|2|3       

Kotlinサンプルの実行

 サンプルを実行してみましょう。

 上部「Run」メニューから「Run app」を選択すると、図1の「Select Deployment Target」ダイアログが表示されます。これはアプリをどの環境で実行するかを選択するためのダイアログです。実際のAndroid端末をPCに接続している場合は上部の「Connected Devices」に表示されます。

 今回は下部の「Android403」を選択して「OK」ボタンをクリックし、PC上のAndroid Emulatorでアプリを動かします。初回実行時など、Androidのシステムイメージをダウンロードしていない場合は、確認ダイアログが出ますので、ダウンロードしてください。

図10 「Select Deployment Target」ダイアログ

 Android Emulatorの起動後、少しするとアプリがデプロイされ、図2のように「Hello World!」メッセージが表示されます。

図11 Android Emulatorでの実行結果

 自動生成された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)
    }
}
リスト3 MainActivity.kt

 先頭のpackage、import文は、末尾のセミコロンがない以外は、Javaとほぼ同様の内容です。クラス定義にclassキーワードを使うのは同じですが、継承にextendsキーワードを使うJavaと異なり、コロンを使って継承元クラスであるAppCompatActivityを指定しているのが特徴です。とはいえ、C++やC#などの書き方と同様ですので、それほどとっぴな書き方ではありませんね。

 その後はfunキーワードでonCreateメソッドを定義しています。このメソッドにはoverrideが付いているので、AppCompatActivityクラスのonCreateメソッドをオーバーライドしています。メソッドの中身は、セミコロンがない以外はJavaとほぼ同じコードですね。

 先ほどはコマンドライン用アプリのソースコードをざっと見ましたが、Androidアプリ用コードについても、Java開発者にとってあまり違和感のないコードになっていることが分かるでしょう。

イベントハンドラの書き方で、KotlinとJavaを比べてみる

 次に、画面上にボタンを配置し、Kotlinでイベントハンドラを書いてみましょう。「activity_main.xml」タブをクリックすると、図13のようなレイアウト画面とツールバーが表示されます。

図13 レイアウト画面

 ツールバーから「Button」をドラッグ&ドロップで画面上に配置し、右の「Attributes」ペインの「text」プロパティを「Click me!」に書き換えましょう(図14)。

図14 Buttonを配置

 メッセージ表示用に、もともと配置されているTextViewのIDプロパティに「myLabel」を設定して参照できるようにします(図15)。

図15 TextViewのIDプロパティを設定

 続いてイベントハンドラを記述します。「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 !"
    }
}
リスト4 イベントハンドラの記述(MainActivity.kt)

 配置したビューを取得するためのfindViewByIdメソッドなどは、JavaでのAndroid開発でも多用されるものですが、イベントハンドラの設定方法はJavaとは全く異なる書き方になっています。詳細は次回以降に解説します。

 書き換え後、実行してボタンをクリックすると、図16のようにTextViewが書き換わることを確認できます。

図16 ボタンクリックで表示更新

 JavaでAndroid開発経験をお持ちの方には、これだけのコードでイベントハンドラが書けるというのは驚きかもしれません。Javaであれば例えばリスト5のようなコードになることでしょう。

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //イベントハンドラ本体を記述する
    }
});
リスト5 Javaでのイベントハンドラの記述例

 Kotlinに比べるとやや複雑ですが、これでも無名クラスを使ったJavaとしては簡略化した書き方です。元来は「View.OnClickListenerインタフェースを実装したクラスを別途(ないしは自分自身に実装して)用意し、イベントハンドラとしてそのインスタンスを渡す」といったコードになるはずです。Javaに比べて、ぐっと簡略化されたKotlinのコードに魅力を感じる方も少なくないことでしょう。

「when」キーワードやラムダ式などの機能も注目

 このように本連載では、Kotlin言語のさまざまな特徴を解説していきます。上記コードのように、Android開発においても有用な言語機能が幾つも組み込まれていますので、どうぞご期待ください。また本稿では、Kotlinの特徴について、ざっと目に付くところだけ挙げましたが、その他にも「when」という見慣れないキーワードや、ラムダ式などの機能も注目株でしょう。次回以降の言語機能解説をお楽しみに。

今回のサンプルコード

 今回のサンプルコードはこちらからダウンロードできます

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。