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

Kotlin導入 5つのステップ

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Kotlin導入 5つのステップ

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

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

Avatar for Koji Wakamiya

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