めちゃめちゃ簡単な占いアプリをKotlinで実装してみる

## はじめに

最近Androidエンジニアになりました。やっぱり今から勉強するならKotlinだよねってことで、Kotlinを使って超簡単な占いアプリを作ってみました。

その過程でKotlinって便利だな〜と感じた箇所についていくつか触れていますので、これからKotlinを始めるという方に読んでいただければ幸いです。

## 作るもの

占う！ってボタンを押すと大吉とか中吉とか出してくれるめちゃくそ簡単なアプリです。(口が悪くてすみません)
ソースコードは以下にあげてますので、よかったらぜひ。

<img width="349" alt="スクリーンショット 2017-08-07 18.35.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/147934/a0041ba1-ed35-0934-8f8f-73f3b2b7d56a.png">

[youmitsu/VeryEasyFortuneApp](https://github.com/youmitsu/VeryEasyFortuneApp)

## セットアップ

まず、最初にAndroidStudioでKotlinを使えるようにします。
基本的には、以下のサイトでKotlinの導入方法に触れています。

[Kotlinを使ってAndroidの開発を始めてみる](http://qiita.com/knakamigawa/items/de0082d2a8449b09acf6)

## Kotlinのコード

今回作ったアプリのソースコードは以下の2つのファイルのみです。

### MainActivity.kt

```MainActivity.kt
package com.example.mitsuhori_y.uranaiapplication.Activity

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.example.mitsuhori_y.uranaiapplication.Entity.Fortune
import com.example.mitsuhori_y.uranaiapplication.R
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        fortuneButton.setOnClickListener {
            val resResult: Fortune = Fortune().getFortune()
            result.text = resResult.name
            description.text = resResult.description
        }
    }
}
```

#### Kotlinっていいな1. Kotlin Android Extension
ここで使用しているのが、「Kotlin Android Extension」です。これはlayoutを記述しているxmlファイルのid指定してあるコンポーネントをActivity内で直接変数として使用できるものです。これによってjavaのとき面倒だったfindViewByIdという記述が不要になります。Kotlin Android Extensionの導入方法については、以下のURLを参考にしてください。

[Kotlin Android Extensionを試してみた](http://qiita.com/rei-m/items/c808fd0b6b83303bd3a2)

#### Kotlinっていいな2. ClickListenerの実装が簡単に

本来Javaならリスナーをセットする時に以下のようにOverrideやらメソッド定義やら色々書かなきゃいけないですが、Kotlinならめちゃめちゃスッキリします。

##### Javaの場合

```
findViewById(R.id.fortuneButton).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      Fortune resResult = new Fortune().getFortune();
      //textViewのコンポーネント取得してsetTextする
    }
});
```

##### Kotlinの場合

```
fortuneButton.setOnClickListener {
    val resResult: Fortune = Fortune().getFortune()
    result.text = resResult.name
    description.text = resResult.description
}
```

### Fortune.kt

```Fortune.kt
package com.example.mitsuhori_y.uranaiapplication.Entity

import java.util.*

/**
 * Created by mitsuhori_y on 2017/08/07.
 */
class Fortune {

    val fortuneList = arrayOf("大吉", "中吉", "吉", "小吉", "末吉", "凶", "大凶")
    val descList = arrayOf(
            "やったね！いいことしか起きないんじゃないかな？",
            "おお！まあいいことのほうか多いんじゃないかな？",
            "うーん、なんか普通な日かもね〜、悪いことはないと思うよ!",
            "帰り道とか足元気をつけたほうがいいかもね",
            "割とがちで夜は出歩かないほうがいいんじゃないかな？",
            "うん、人生いいことばかりじゃないって、元気出せって",
            "あのね、今日は家出ないほうがいいどころか、起きないほうがいいかもね。")

    var name: String = ""
    var description: String = ""

    open fun getFortune(): Fortune {
        val index = Random().nextInt(fortuneList.size)
        this.name = fortuneList[index]
        this.description = descList[index]
        return this
    }

}
```

このクラスは占いの結果を作成しているクラスです。そこまでKotlinらしさはないかなと思いますが、クラスの宣言の仕方などは特徴的かもしれないですね。

## まとめ

今回はKotlinを使ってめちゃめちゃ簡単なアプリを作ってみましたが、全体的にコードがスッキリする印象でした。もう少し色々アプリを作ってみながらKotlinに慣れていきたいと思います。