Использование префикса "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
}