Android
Kotlin

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

はじめに

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

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

作るもの

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

スクリーンショット 2017-08-07 18.35.54.png

youmitsu/VeryEasyFortuneApp

セットアップ

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

Kotlinを使ってAndroidの開発を始めてみる

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を試してみた

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に慣れていきたいと思います。