何时使用中文标识符

最后更新日期:2014-05-26

  一些编程语言(如 Java 、 PHP)中可以使用中文标识符。很多人都不用这个特性(feature),但我认为,在合适的时候使用中文标识符,可以提高代码的可读性。

  接近业务、接近领域的概念,如果这些概念本来就是用文本表述的,代码中直接使用中文就是最好的。否则,还需要在代码中翻译出一个对应的英文单词来,但这个英文单词其实是冗余的。

  例:云风的这篇文章中提到了策划需要使用中文变量名。我想这是因为在这种情况下使用中文就是最自然的,翻译成英文或者用拼音写代码会非常蹩脚。

  如果是抽象、普遍的概念,就没有必要使用中文了。比如 if / then / else 等流程控制语句,某些“中文编程语言”把这些东西也搞成中文,依我看这就完全没必要了。

  另一个使用场景是单元测试名,其实这里理想状态下应该是匿名的才对,不过我主张能用代码表达的就不用注释。比如我写过这样的代码:

@Test
public void 部分发货邮件文本中没有_発送が分かれたことによって追加で配送料や手数料がかかることはありません_这句话() {
    ...
}

@Test
public void 一般是ご注文いただいた商品_但这个是ご注文いただいたギフト商品_多了个ギフト() {
    ...
}

@Test
public void 金额中可能包含逗号() {
    ...
}

@Test
public void 标题_ご注文_之前没有_の() {
    ...
}

  当然这个也不是我发明的,我也是跟淘宝学的:http://www.infoq.com/cn/articles/interface-test(第三张图)

  hongqn 对单元测试函数命名的讨论(以及 robbin 的回复):http://www.douban.com/note/50109382/(一句中文比看不懂的英文强多了)


2014-05-26 更新:

  关于单元测试函数是否应该用中文命名的讨论已经可以终结了。使用 ScalaTest ,我已经开始这样写单元测试了:

  test("出荷前面有 Invoice No") {
    val info = testMail("""
...
""")
    info.deliveryNo should be ("4706")
    info.expressNo should be ("-")
    info.items should have size 14
    info.items(0) should have (
      'ean ("42"),
      'price (46)
    )
  }

  所以单元测试一定要是一个函数什么的根本就是语言和库的限制嘛。