使用" 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
}
我们该怎么办?是否有新的公约要遵循?
答案 0 :(得分:13)
Android的一个很好的参考
https://android.github.io/kotlin-guides/style.html
特殊前缀或后缀,如示例name_中所示, 除了支持外,不使用mName,s_name和kName 属性(参见“Backing properties”)。
答案 1 :(得分:9)
除了支持属性的情况外,不使用特殊前缀或后缀,如示例
name_
,mName
,s_name
和kName
中所示的前缀或后缀见“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
}