web-dev-qa-db-ja.com

Kotlinの変数に「m」プレフィックスを使用する

プログラミングでは、主にAndroidで、変数名に「m」プレフィックスを使用することが一般的になりましたが、Kotlinが登場して以来、この些細なことが少し気になります。

Javaでは、セッターとゲッターを作成(および名前付け)するため、 "m"を省略できるため、プレフィックスが "m"の変数の設定と取得はあまり適切ではないようですが、これは慣例の反対を歩き、Javaの手法を繰り返さない限り、Kotlinでは発生しません。

Java:

public class Foo {
    private String mName;

    public void setName(String name) {
        mName = name;
    }

    public String getName() {
        return mName;
    }
}

public class Main {
    public static void main(String[] args) {
        Foo foo = new Foo();
        foo.setName("Foo");
    }
}

Kotlin:

data class Foo(val mName: String)

fun main(args: Array<String>) {
    val foo = Foo()
    foo.mName = "Foo"  // "m" prefix doesn't fit
}

私たちは何をすべき?従うべき新しい慣習はありますか?

12
Hugo Passos

Androidからの良いリファレンス

https://Android.github.io/kotlin-guides/style.html

Name_、mName、s_name、およびkNameの例に見られるような特別な接頭辞または接尾辞は、バッキングプロパティの場合を除いて使用されません(「 バッキングプロパティ 」を参照)。

16
Yuri Schimke

Android Kotlinスタイルガイド

例に見られるような特別な接頭辞または接尾辞name_mNames_nameおよびkNameは、バッキングプロパティの場合を除いて使用されません(「 バッキングプロパティ 」を参照)。

したがって、Kotlinの変数に「m」プレフィックスを使用しないでください。

9
ianhanniballake

実際、パブリックAPIに接頭辞付きの変数を設定するのは良い習慣ではないと思います。したがって、foo.mName = "Foo"は望ましくありません。 privateフィールドの場合、これは許容されます。

Kotlin言語の公式 conventions は次のように述べています。

バッキングプロパティの名前

クラスに概念的に同じ2つのプロパティがあり、一方がパブリックAPIの一部であり、もう一方が実装の詳細である場合は、プレフィックスとしてアンダースコアを使用します。私有財産の名前については:

class C {
    private val _elementList = mutableListOf<Element>()

    val elementList: List<Element>
         get() = _elementList
}
5
s1m0nw1