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

ну, использование префикса" m " для имен переменных стало обычным в программировании, в основном в Android, но с тех пор, как Котлин прибыл, эта незначительная вещь меня немного беспокоит. Внутри родительского класса нет ничего нового, но установка и получение переменных из другого класса не кажется действительно комфортным, потому что в Java мы создаем (и называем) наши сеттеры и геттеры, поэтому мы можем опустить "m", что не происходит в Котлине, если мы не идем в противоположность соглашениям и не повторяем Java метод.

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

специальные префиксы или суффиксы, как те, которые видны в названии примеров_, mName, s_name, и ХНАГХ, не используются, за исключением бэк свойства (см. "поддержка свойства").


на Руководство По Стилю Android Kotlin:

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

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


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

чиновник конвенций на Котлинском языке говорят:

имена для резервного копирования свойств

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

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

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