拡張関数の定義先ファイルのパッケージ
例えば android.content.res.Resources
に対して次のような拡張関数を生やすとして、
fun Resources.isLandscape() = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
拡張関数の定義先を com.sample.app.extensions
パッケージ配下に作成した ResourcesEx.kt
とすると、
package com.sample.app.extensions import android.content.res.Configuration import android.content.res.Resources fun Resources.isLandscape() = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
使う側では次のようなコードになる
package com.sample.app.layer.presentation.view import com.sample.app.extensions.isLandscape class FooActivity : Activity { override fun onCreate(savedInstanceState: Bundle?) { if (resources.isLandscape()) { ... } } }
こうするより...
ResourcesEx.kt
を com.sample.app.extensions.android.content.res.Resources
パッケージ配下にしとくと、
package com.sample.app.extensions.android.content.res.Resources import android.content.res.Configuration import android.content.res.Resources fun Resources.isLandscape() = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
使う側では次のようなコードになり、 import 文がより明確になった。
package com.sample.app.layer.presentation.view import com.sample.app.extensions.android.content.res.Resources.isLandscape class FooActivity : Activity { override fun onCreate(savedInstanceState: Bundle?) { if (resources.isLandscape()) { ... } } }
パッケージ名に「何に対する拡張関数か?」を明示的に含めとくと良いのではないかな。
パッケージ名に大文字が入ることに抵抗ある人には厳しそうだけど、個人的には感覚より明示的さを優先したい。