拡張関数の定義先ファイルのパッケージ

例えば 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.ktcom.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()) {
      ...
    }
  }
}

パッケージ名に「何に対する拡張関数か?」を明示的に含めとくと良いのではないかな。

パッケージ名に大文字が入ることに抵抗ある人には厳しそうだけど、個人的には感覚より明示的さを優先したい。