Использование префикса "m" для переменных в Kotlin

Ну, использование префикса "m" для имен переменных стало обычным явлением в программировании, в основном в Android, но с тех пор, как появился Kotlin, эта мелочь меня немного беспокоит. Внутри родительского класса нет ничего нового, но установка и получение переменных из другого класса не кажется действительно удобным, потому что в Java мы создаем (и называем) наши методы установки и получения, поэтому мы можем опустить "m", что не делает произойдет в Котлине, если мы не будем идти вразрез с соглашениями и повторять технику 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");
    }
}

Котлин:

fun main(args: Array<String>) {
    val foo = Foo()
    foo.mName = "Foo"    // "m" gets a bit weird, don't you think?
}


data class Foo(val mName: String)

Как вы себя вели в такой ситуации? Есть ли новое соглашение для подражания?

3 ответа

Решение

Хорошая ссылка от Android

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

Специальные префиксы или суффиксы, подобные тем, которые видны в примерах name_, mName, s_name и kName, не используются, кроме как в случае свойств поддержки (см. " Свойства поддержки").

Согласно руководству по стилю Android Kotlin:

Специальные префиксы или суффиксы, как показано в примерах name_, mName, s_name, а также kName, не используются, кроме как в случае свойств подложки (см. " Свойства подложки").

Поэтому не следует использовать префикс "m" для переменных в Kotlin.

Я на самом деле не считаю хорошей практикой иметь префиксные переменные в общедоступном API, поэтому foo.mName = "Foo" было бы нежелательно. Для частных полей это было бы приемлемо, хотя.

Официальные соглашения для языка Kotlin говорят:

Имена для вспомогательных свойств

Если у класса есть два свойства, которые концептуально совпадают, но одно является частью общедоступного API, а другое - деталь реализации, используйте подчеркивание в качестве префикса для имени частного свойства:

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

    val elementList: List<Element>
         get() = _elementList
}
Другие вопросы по тегам