【问题标题】:Using "m" prefix for variables in Kotlin在 Kotlin 中为变量使用“m”前缀
【发布时间】:2018-01-02 06:06:03
【问题描述】:

在编程中使用“m”前缀作为变量名已经很常见了,主要是在 Android 中,但是自从 Kotlin 出现后,这个小问题让我有点困扰。

设置和获取带有“m”前缀的变量似乎不太好,因为在 Java 中我们创建(并命名)了我们的 setter 和 getter,所以我们可以省略“m”,但这在 Kotlin 中不会发生, 除非我们违背约定并重复 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");
    }
}

科特林:

data class Foo(val mName: String)

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

我们应该怎么做?是否有新的约定可以遵循?

【问题讨论】:

  • 老实说,我一直不明白为什么人们在 Java 中使用 m 前缀。我从来没有这样做过。
  • 这种做法称为匈牙利表示法。在强类型语言中似乎没有多大意义。
  • 这在 Android Java 中很常见,因为 SDK 人员不久前将其作为指南引入。
  • 我也投了赞成票,因为它是 Google 上 Kotlin 属性命名的第一个结果。它最终确实导致了官方文档,所以我认为这是一个很好的问题。
  • m 还是比下划线好。但两者都是其他时代甚至语言的残余。

标签: java android kotlin coding-style


【解决方案1】:

来自 Android 的一个很好的参考

https://developer.android.com/kotlin/style-guide#naming_2

特殊前缀或后缀,如示例中的名称_, 不使用 mName、s_name 和 kName,除非在 backing 的情况下使用 属性(参见“Backing properties”)。

【讨论】:

    【解决方案2】:

    根据Android Kotlin Style Guide

    不使用特殊前缀或后缀,如示例name_mNames_namekName 中所见,除非用于支持属性(请参阅“Backing properties”)。

    因此,您不应在 Kotlin 中为变量使用“m”前缀。

    【讨论】:

      【解决方案3】:

      实际上,我认为在公共 API 中使用前缀变量并不是一个好习惯,因此 foo.mName = "Foo" 是不可取的。不过,对于 private 字段,这是可以接受的。

      Kotlin 语言的官方conventions 说:

      支持属性的名称

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

      class C {
          private val _elementList = mutableListOf<Element>()
      
          val elementList: List<Element>
               get() = _elementList
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 2018-08-14
        • 2018-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多