最初にやるべきこと
拡張関数(プロパティ)を使う場合
- 単体で存続できるケースは拡張関数を許可する
- 仮にこの拡張関数が属するライブラリと離婚することになっても、この処理は容易に移行できる
val Context.debugMode: Boolean
get() = packageManager.getApplicationInfo(packageName, 0)?.let { appInfo ->
return appInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE == ApplicationInfo.FLAG_DEBUGGABLE
} ?: false
if(context.debugMode) {
...
}
Utilクラスにまとめる場合
- 自身のライブラリや、他のライブラリへの依存がある場合はUtilクラスにまとめる
fun Context.getMyInfo(): MyInfo {
return MyInfo(this)
}
val myInfo = context.getMyInfo()
val myInfo = HogeUtil.getMyInfo(context)
拡張関数(プロパティ)とクラスの使い分けに迷ったら
- 文脈として自然であると考えられるなら、拡張関数を許可する
- 拡張関数のほうがIntellisenseとの親和性が高い
同じ名前の拡張関数を見つけたら?
- 公式(もしくはメンテナンス頻度が高いもの)を優先する