29
Kotlin 3 @kikuchy

モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

Embed Size (px)

Citation preview

Page 1: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

モバイルアプリ開発をグッと楽にする

Kotlinの便利なところ3選

@kikuchy

Page 2: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

Who?

@kikuchy

菊池 紘

株式会社Diverse (ミクシィグループ)

新規のAndroidアプリ開発やってます

Page 3: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

Kotlinがどんな言語かご存知の方?

Page 4: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

Kotlinという言語IntelliJで有名なJetBrainsが作った言語

数々のプラットフォーム上で動作

初めはJVMの上で動く言語として有名に2017年5月からAndroidの公式開発言語

Spring Framework 5 からKotlinサポート

今では更に幅広く

JavaScriptにも!

LLVMでマシン語にも!

なのでiOSアプリも書けちゃう

Page 5: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

これだけできれば何でもできる、と言っても過言ではない言語

Page 6: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
Page 7: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

今回はモバイルアプリ開発のときに便利な 言語機能に絞ってお伝えします

Page 8: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

1. 文ではなく"式"

Page 9: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

// Javaif (user.isNewCommer()) { forNewcommerView.setVisivility(View.VISIBLE);} else { forNewcommerView.setVisivility(View.GONE);}

// KotlinforNewcommerView.visivility = if (user.isNewcommer) { View.VISIBLE} else { View.GONE}

Page 10: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

// KotlinIntent( context, when (age) { in 0..6 -> WithRubyActivity::class.java in 7..12 -> EasyKanjiActivity::class.java else -> StanderdActivity::class.java })

Page 11: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

1. 文ではなく"式"

何が便利なの?

→ 同じようなメソッド呼び出し/一時変数の宣言を書かなくて良い!!!

Page 12: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

2. 代数的データ型も取り扱い可能

Page 13: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

これを支える言語機能

sealed class

Smart Cast

Page 14: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

2‑1. sealed class

// BTreeNode.kt// 二分木sealed class BTreeNode {

// 葉 data class Leaf( val data: Int ): BTreeNode() // 枝 data class Branch( val left: BTreeNode, val right: BTreeNode ): BTreeNode()

}

// OtherFile.kt// ↓これはコンパイルエラーになる// class OutOfTree(): BTreeNode()

Page 15: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

2‑1. sealed class

特定の範囲内でのみ継承可能な抽象クラス

version 1.0.4までは「内部クラスのみ」

version 1.0.4から「同じファイル内でのみ」

これによって代数的データ型を実現できる

型によるORを表現できるようなものだと思ってくださいex)  BTreeNode  とは  Leaf  or  Branch 

Page 16: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

2‑2. Smart Cast

fun extract(node: BTreeNode): Int { if (node is Leaf) { return node.data // <- 注目! } ...

Page 17: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

2‑2. Smart Cast

文脈から型が明らかな場合、自動的にキャストしてくれる機能

Page 18: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

2. 代数的データ型も取り扱い可能

何が便利なの?

→ UIに不可欠な状態管理を簡単に書ける!!!

Page 19: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
Page 20: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
Page 21: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

https://www.slideshare.net/HiroshiKikuchi/ss‑78564692

Page 22: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

3. 提供されてる拡張関数が豊富

Page 23: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

// JavaIntent newIntent(Context context, String p1, String p2) { final Intent intent = new Intent(context, SomeActivity.class); intent.putExtra("p1", p1); intent.putExtra("p2", p2); return intent;}

// Kotlinfun newIntent(context: Context, p1: String, p2: String) = Intent(content, SomeActivity:class.java).apply { putExtra("p1", p1) putExtra("p2", p2) }

Page 24: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

//Javafinal int[] optionIds = { R.string.tokyo, R.string.kyoto, R.string.osaka};

final String[] options = new String[](optionIds.size);for(int i = 0; i < optionIds.size; i++) { options[i] = getString(optionIds[i]);}

final ArrayAdapter<String> spinnerAdapter = new ArrayAdapter( getContext(), R.layout.spinner_item, options );

Page 25: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

// Kotlin val spinnerAdapter = ArrayAdapter<String>( context, R.layout.spinner_item, arrayOf( R.string.tokyo, R.string.kyoto, R.string.osaka ) .map { id -> getString(id) })

Page 26: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

3. 提供されてる拡張関数が豊富

何が便利なの?

→ 紋切り型のコードを書く必要がなくなる!!!

Page 27: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

紹介しきれなかっただけで他にもたくさん

Nullablityが型レベルで表現されている

型推論もある

標準で提供されているクラス群も便利

Android Kotlin Extensionを使うとView探しが超ラクに

わかりやすく読みやすいDSLも作れる

iOSもKotlinで書けるようになる予定

Page 28: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

便利なKotlinを使っていきましょう

Page 29: モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選

宣伝

DiverseではSwift(iOS)/Kotlin(Android, サーバー)を扱えるエンジニアを募集中です

特に新規事業のiOS開発チームリーダー募集に注力中

自分の力でサービスを成長させることに興味がある方、お話させて

ください!