Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

996 views

Published on

Swift/Kotlion勉強会 #2 でお話する(した)ものです。

Published in: Technology
  • Be the first to comment

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

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

×