使用" m" Kotlin中变量的前缀

时间:2018-01-02 06:06:04

标签: java android kotlin coding-style

使用" m"变量名称的前缀在编程中变得很常见,主要是在Android中,但是自从Kotlin到来之后,这个小问题让我感到困扰。

使用" m"设置和获取变量前缀似乎并不是很好,因为在Java中我们创建(和命名)我们的setter和getter,所以我们可以省略" m"但这在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");
    }
}

科特林:

data class Foo(val mName: String)

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

我们该怎么办?是否有新的公约要遵循?

3 个答案:

答案 0 :(得分:13)

Android的一个很好的参考

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

  

特殊前缀或后缀,如示例name_中所示,   除了支持外,不使用mName,s_name和kName   属性(参见“Backing properties”)。

答案 1 :(得分:9)

根据Android Kotlin Style Guide

  

除了支持属性的情况外,不使用特殊前缀或后缀,如示例name_mNames_namekName中所示的前缀或后缀见“Backing properties”)。

因此你不应该使用&#34; m&#34; Kotlin中变量的前缀。

答案 2 :(得分:4)

我实际上认为在公共API中使用前缀变量是不错的做法,因此foo.mName = "Foo"是不合需要的。对于私有字段,这是可以接受的。

Kotlin语言的官方conventions说:

  

支持属性的名称

     

如果一个类有两个属性在概念上相同但一个是公共API的一部分,另一个是实现细节,请使用下划线作为私有属性名称的前缀:

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

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