Do what you want to do

プログラミングとかとか

[Kotlin] LogクラスのTAGとしてActivityのクラス名を指定する処理をKotlinの拡張関数を使って共通化する

「毎回Activity毎にLogのTAG用変数作るとか面倒すぎじゃない?」

Kotlinなら拡張関数で簡単に共通化できそう... ということでやってみました。

LogクラスのTAGとしてActivityのクラス名を指定したい

「LogクラスのTAGとしてActivityのクラス名を出力する」ということはよくあるやり方だと思います。 JavaでもKotlinでも以前からAndroidではLog クラスを使ってログを出力できます。

Log クラス に載っているTAGの定義(Javaですが)を見てみましょう。

private static final String TAG = "MyActivity";

「いやいや、うーん、文字列入れてるだけじゃん。ってか毎回Activity毎にこれ定義するの?まじ?」

Kotlinの拡張関数を使って共通化

以下のようにKotlinを拡張してログを出力する関数を定義しました。 this::class.java.simpleName を使ってクラス名を取得しています。

import android.app.Activity
import android.util.Log

fun Activity.logd(message: String) {
    Log.d(this::class.java.simpleName, message)
}

使い方

使い方は簡単。Activityから定義したlogd 関数を呼ぶだけです。

fun didTapButton(view: View) {
    logd("user tapped the button.")
}

おわりに

クラス名を取得する処理を1箇所にまとめたことでActivity毎に毎回LogのTAG用変数を定義する必要がなくなりました。 Kotlinの拡張関数便利ですね。