モバイルアプリ開発をグッと楽にするkotlinの便利なところ3選
TRANSCRIPT
モバイルアプリ開発をグッと楽にする
Kotlinの便利なところ3選
@kikuchy
Who?
@kikuchy
菊池 紘
株式会社Diverse (ミクシィグループ)
新規のAndroidアプリ開発やってます
Kotlinがどんな言語かご存知の方?
Kotlinという言語IntelliJで有名なJetBrainsが作った言語
数々のプラットフォーム上で動作
初めはJVMの上で動く言語として有名に2017年5月からAndroidの公式開発言語
Spring Framework 5 からKotlinサポート
今では更に幅広く
JavaScriptにも!
LLVMでマシン語にも!
なのでiOSアプリも書けちゃう
これだけできれば何でもできる、と言っても過言ではない言語
今回はモバイルアプリ開発のときに便利な 言語機能に絞ってお伝えします
1. 文ではなく"式"
// Javaif (user.isNewCommer()) { forNewcommerView.setVisivility(View.VISIBLE);} else { forNewcommerView.setVisivility(View.GONE);}
// KotlinforNewcommerView.visivility = if (user.isNewcommer) { View.VISIBLE} else { View.GONE}
// KotlinIntent( context, when (age) { in 0..6 -> WithRubyActivity::class.java in 7..12 -> EasyKanjiActivity::class.java else -> StanderdActivity::class.java })
1. 文ではなく"式"
何が便利なの?
→ 同じようなメソッド呼び出し/一時変数の宣言を書かなくて良い!!!
2. 代数的データ型も取り扱い可能
これを支える言語機能
sealed class
Smart Cast
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()
2‑1. sealed class
特定の範囲内でのみ継承可能な抽象クラス
version 1.0.4までは「内部クラスのみ」
version 1.0.4から「同じファイル内でのみ」
これによって代数的データ型を実現できる
型によるORを表現できるようなものだと思ってくださいex) BTreeNode とは Leaf or Branch
2‑2. Smart Cast
fun extract(node: BTreeNode): Int { if (node is Leaf) { return node.data // <- 注目! } ...
2‑2. Smart Cast
文脈から型が明らかな場合、自動的にキャストしてくれる機能
2. 代数的データ型も取り扱い可能
何が便利なの?
→ UIに不可欠な状態管理を簡単に書ける!!!
https://www.slideshare.net/HiroshiKikuchi/ss‑78564692
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) }
//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 );
// Kotlin val spinnerAdapter = ArrayAdapter<String>( context, R.layout.spinner_item, arrayOf( R.string.tokyo, R.string.kyoto, R.string.osaka ) .map { id -> getString(id) })
3. 提供されてる拡張関数が豊富
何が便利なの?
→ 紋切り型のコードを書く必要がなくなる!!!
紹介しきれなかっただけで他にもたくさん
Nullablityが型レベルで表現されている
型推論もある
標準で提供されているクラス群も便利
Android Kotlin Extensionを使うとView探しが超ラクに
わかりやすく読みやすいDSLも作れる
iOSもKotlinで書けるようになる予定
便利なKotlinを使っていきましょう
宣伝
DiverseではSwift(iOS)/Kotlin(Android, サーバー)を扱えるエンジニアを募集中です
特に新規事業のiOS開発チームリーダー募集に注力中
自分の力でサービスを成長させることに興味がある方、お話させて
ください!