Kotlin + androidの入門書が無い

最近Kotlinというプログラム言語をよく目にするようになりました。

調べてみるとandroidの開発言語に正式採用された、という事で記事になっていたんだな。

開発元はJetBrains。という事はIDE関係作っていたところか。IntelliJ IDEAにはお世話になったので調べて見ると面白そうなので使ってみることに。

以前、Javaを使っていたんだがなんか冗長な感じというか、引数内でオブジェクト作ってというタイプが慣れなくて避けていたんだが、その辺りがすっきり書けそうな感じ。ついでにandroidの開発が出来るなら試してみるかと、本を購入。

Kotlinスタートブックというやつで、通称赤べこ本。

Kotlinスタートブック -新しいAndroidプログラミング

Kotlinスタートブック -新しいAndroidプログラミング

で早速勉強してみたんだが、まぁ最初の方はサクサクと。言葉自体はどの言語も一緒だから、作法というかそういったものの勉強。

そしてandroid開発の章に入ったら躓いた。

説明を見るとandroid開発の基礎知識がある事が前提なのか。IntentとかActivityの意味位の基本しか知らないよ。

せっかくだからandroid開発も出来るように覚えようと思ったのだが、出来ない。 ネットで調べても、やはりkotlin+androidだと全部android開発の基礎知識がある事が前提。

android開発をしたければ、まず通常のJava前提で書かれた本を読んでからやれ、という事か。

分からないことはJavaでソースを書いてからandroid studioのソース変換で見てみたりしたけど、手間がかかりすぎてイライラする。

誰かkotlin + androidの入門書を書いてくれないかなぁ。そんな難しいことをしたい訳ではないから学習コストが高いのでやる気が出ない。

この感じは、Rails+Rubyの時も感じました。あそこもバージョンアップが激しすぎて、追いかけるだけで疲れてしまってPython+Djangoに変更した所があるし。

しかしここまで手間を書けてしまうと、今までの学習が無駄になるので覚えるまで止められない……

ちなみにJavaだとButtonにonTouchイベントを追加して処理するなら

Button btn = findViewById(R.id.button_id);
btn.setOnTouchListener(new Button.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        event.getAction()

        ....

という感じに出来るのに

Kotlinだと

val btn = findViewById<View>(R.id.button_id) as Button
btn.setOnTouchListener(object : Button.OnTouchListener {

の段階でボタンのsetOnTouchListenerの引数がView.OnTouchListenerに変わっているのでエラーとなる。 こういった所でイライラする。

ちなみにクラス自体に継承させちゃうと楽ではある。

class MainActivity : AppCompatActivity(), View.OnTouchListener {
    (略)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mainButton.setOnTouchListener(this)
    }

    override fun onTouch(v: View?, event: MotionEvent?): Boolean {

まぁ互換性があるとはいっても、言語縛りが変わるから……そのあたりのKotlinを調べないとどう実装するかが不明となる。 Nullableとかも微妙に、!!使って無理矢理変更する方法もあるけど、非推奨だし。