Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin導入 5つのステップ

Kotlin導入 5つのステップ

「集まれKotlin好き!Kotlin愛好会 vol7」の発表資料です。

Kotlinを既存プロダクトに導入した際、重要だなと思ったポイントを5点紹介します。

Koji Wakamiya

January 21, 2019
Tweet

More Decks by Koji Wakamiya

Other Decks in Programming

Transcript

  1. SDK16 + Kotlin? • API16ならstdライブラリを利用すべき ◦ Android4系のテストは厳しい ◦ SDKはminSDKが利用アプリに影響する •

    API19以上なら(現状は)std-jdk7で問題なさそう ◦ “AutoClosable”APIがAPI19からサポート ◦ “try-with-resource”は全てのAPiでサポート 5
  2. Java7以下でListのStreamAPI • “for + if” を “filter” で • “flatMap”

    で入れ子リストの操作 Rx-Sreamの 利用シーン サーバーAPIへのアクセス • HTTP GETをSingleで • HTTP 204をCompletableで 7
  3. Enumの役割 - パターンの列挙 - When文との組み合わせによる 処理分岐 Enumを純粋な列挙 にする Enumで実行したい事柄 -

    パターンに応じた文字列 - Enumの表現に合わせた 表示/非表示の組み合わせ 10
  4. 例:UserTypeを定義する enum UserType(val code: String) { FREE(“free”), PREMIUM(“premium”) } fun

    UserType.stringResId() = when(this) { UserType.FREE -> R.string.plan_free // 無料プラン USerType.PREMIUM -> R.string.plan_premium // 課金プラン else -> R.string.other // その他 } 11
  5. オブジェクトの目的 16 JSON Data Class Data Class Server API Response

    サーバー処理の結果 DBからの取得結果 JSON Parsed Class APIレスポンスを JVM上で簡単に扱う In-App Data アプリのロジックや UI表示に対応
  6. オブジェクトの特徴 17 JSON Data Class Data Class Server API Response

    パラメータの追加/削除 に対応しやすい JSON Parsed Class APIレスポンスの更新に 対応しやすい In-App Data アプリロジックの更新に 対応しやすい
  7. Resource • status(Status), msg(String?), data(T?) • Statusの定義 ◦ success ◦

    error ◦ loading AACサンプル NetworkState • status(Status), msg(String?) • Statusの定義 ◦ LOADED ◦ LOADING ◦ error 21 https://github.com/googlesamples/android-architecture-components/blob/master/GithubBrowserSample/app/src/main/java/com/android/example/github/vo/Resource.kt https://github.com/googlesamples/android-architecture-components/blob/master/PagingWithNetworkSample/app/src/main/java/com/android/example/paging/pagingwithnetwork/reddit/repository/NetworkState.kt
  8. A discriminated union that encapsulates successful outcome with a value

    of type T or a failure with an arbitrary Throwable exception. 22 kotlin-stdlib/ kotlin/Result
  9. launch { state.postValue(State.LOADING) // 通信開始 runCaching { repository.user() // Coroutinesによる通信

    }.fold( onSuccess = { user.post(it) // 通信結果 state.postValue(State.LOADED) // 通信成功 }, onFailure = { state.postValue(State.error(it)) // 通信失敗 } } ※StateクラスはNetworkStateクラスのThrowable?を保持する独自拡張クラス 23
  10. + LiveDataを推進 • ViewModel ◦ Model層から受け取るCoroutinesをResultで表現 ◦ Resultの結果をLiveDataに変換 • View

    ◦ ViewModel層からLiveDataでデータを取得 ◦ 正常/異常の状態に応じたUIを提供 24
  11. Credits Special thanks to all the people who made and

    released these awesome resources for free: • Presentation template by SlidesCarnival • Photographs by Unsplash 27