Kotlinのinvoke演算子の使い所
/ 3 min read
Updated:Table of Contents
はじめに
最近Android開発をメインに業務をしています。
Kotlinにはinvoke演算子がありますが、いまいち何に使うかピンと来なかったのですが、UseCase層で使うとわかりやすくていいな〜となったのでなぜいいと思ったのか紹介します。
UseCase層で使う
invoke演算子は()だけでそのメソッドを呼び出すことができます。参考コードを示します。
interface HogeUseCase { operator fun invoke()}
class HogeUseCaseImpl(): HogeUseCase { override operator fun invoke() { println("Hello, World!") }}
// 呼び出すときval useCase: HogeUseCase = HogeUseCaseImpl()// こんな感じで()で呼び出せるuseCase()自分はUseCaseに複数のpublicなメソッドを実装していたのですが、Google公式のドキュメントにはUseCaseは一つの機能を担うべきと書かれていました。
実際にGoogle公式のドキュメントのサンプルコードもinvokeを使ったコードを紹介しています。
これらのクラスをシンプルかつ軽量に保つために、各ユースケースは 1 つの機能だけを担うべきであり、可変データを含むべきではありません。代わりに、可変データを UI レイヤまたはデータレイヤで処理する必要があります。
これらより、
- 省略できるのでコード量が少ない
- メソッド名で悩まなくていい
- UseCaseが1つの機能を担うという特性と相性が良い
以上を考えるとUseCaseで使うのがしっくり来ました。
終わりに
invoke演算子の使い所についてUseCaseで使うのが便利だなと思った理由について紹介しました。
Android開発に限らずクリーンアーキテクチャではUseCaseは一つのpublicなメソッドを持つことが多いと思うので、そちらでも使えそうです。
Kotlinにはまだまだ知らない便利機能があるので他にも見つけていきたいと思います。