Skip to content

Instantly share code, notes, and snippets.

@eyasuyuki
Last active April 27, 2016 06:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eyasuyuki/b0a204f9be905bb03c9d322cf25b949e to your computer and use it in GitHub Desktop.
Save eyasuyuki/b0a204f9be905bb03c9d322cf25b949e to your computer and use it in GitHub Desktop.

KotlinによるAndroid開発

2016-04-27 タイムインターメディア技術部会

結論

Javaを捨ててKotlinに移行しよう!

Kotlinとは

https://kotlinlang.org/

  • JetBrainsが開発したJVMで動くコンパイラ言語
  • Javaと完全互換
  • Null安全
  • 関数型言語からの影響
    • ラムダ式
    • 高階関数
    • 末尾再帰
    • 多値
    • パターンマッチ
    • 型推論
    • ifなどが構文ではなく式(値を返す)
    • 中値記法
  • Scalaの影響を受けているがコンパイルがScalaより速い
  • Swift(2014〜)に似てるって言われるけどこっちが先(2011)
  • 名前の由来はJavaと同じで地名 https://goo.gl/maps/3mMmGKpeFsB2

何がうれしいのか?

  • ボイラープレートからの解放
  • Javaのアノテーション地獄からの解放
  • Java7環境でもラムダ式が使える

→ Javaよりも開発効率が向上する!!!

インストール

Android Studioにプラグインを追加

(デモ)

JavaプロジェクトをKotlinプロジェクトに変換

(デモ)

JavaソースをKotlinソースに変換

(デモ)

文法の特徴

定数と変数

val x: String = "xyz" // 定数
var a: String = "abc" // 変数

Null安全

var x: String = null // コンパイルエラー
var a: String? = null // OK

nullを許容する変数は型名の末尾に?記号を付けなければならない。

ラムダ式

var ints = listOf(1, 2, 3, 4, 5) // リストの生成
ints.map { it * 2 } // 各要素を2倍する。itはラムダ式の暗黙の引数

(mapの他にfilter, foldなども使える)

同等なSchemeコード:

(map (lambda (x) (* x 2)) '(1 2 3 4 5))

データクラス

Java:

public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public Sttring getName() {
        return name;
    }

    public void setName(String name) {
       this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
}

Kotlin:

data class User(name: String?, age: Int?)

おまけ: Java+Lombok:

@Data
@AllArgsConstructor
public class User {
    private String name;
    private int age;
}

便利なライブラリ

他にもあるけど使ったことがあるものだけ。

Kotter Knife

https://github.com/JakeWharton/kotterknife

Butter Knife http://jakewharton.github.io/butterknife/ のKotlin版。

Kotter Knife以前

private val imageView: ImageView = findViewById(R.id.my_image_wiew) as ImageView

Kotter Knife以後

private val imageView: ImageView by bindView(R.id.my_image_view)

Kotpref

https://github.com/chibatching/Kotpref

SharedPreferenceを使いやすくするライブラリ

おまけ: エミュレータはGenymotionが爆速

https://www.genymotion.com/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment