仓库源文站点原文


layout: post comments: true title: 拿什么拯救你,长英文命名——用中文(也许标点也可以)试试 description: date: 2019-12-08 00:00:00 -0700

categories: 命名

前文在代码中进行中文命名(类/变量/方法等)的优势已小结了一些,此文是因为某回复说用全中文命名不一定比中英混合短,于是用那个回答下的例子作了下比较:

注:此文并不仅针对此回复,仅用此例作引

findBy客户编号And交易账号And基金代码OrderBy发生日期Asc    // 这是原例程(非本人作者)
通过客户编号交易账号和基金代码查找并按发生日期升序排列        // 源自该回复
findByCustomerIdAndTransactionAccountAndFundIdOrderByOccurredDateAsc   // 改写为英文

可见,至少此例中,全中文的仍然比中英混合的要短,即使英文已经用了缩写 Asc(ascending)。当然如果全英文命名的就更长的多。(虽然此例并非如此,但的确有些时候全中文不一定更短)

随着业务逻辑的复杂度增加,标识符长度往往在逐渐变长,读写都更加困难。像上面的原例程中那样沿用中文文档(前文 开发中文 API 的一些策略 2.2也提到)中的术语(“基金代码”等等)就非常恰当。中文术语往往比英文的简短,无需赘言。

但是,长中文命名毕竟意味着断句更加困难。上面的例子中,如果标识符能够带有标点的话,比如:

通过客户编号、交易账号、基金代码查找,并按发生日期升序排列

将会接近自然语言许多,也好读一些。

常用的英文编程语言中,标识符不允许标点,个人认为一个原因是英文的特性使然。因为英文自然语言使用空格分隔词语,标识符中需要将空格去掉以避免语法歧义,单词已经“粘在了一起“,再加进标点的话(即使语法分析能够搞定),难免觉得别扭,比如上面的:

findByCustomerId,TransactionAccount,FundIdOrder,ByOccurredDateAsc

而中文自然语言本身不用空格分词,加入标点毫无违和感。

带着这种美好的憧憬,在 Java 下尝试了一下,可惜好像所有中文符号都无法用于命名。

不过,Python 有个惊喜:

2019-12-08_python中点

尝试的中文标点中,只有这个”·“(反单引号)可用于标识符命名。不过至少多了个选择,可以让长命名更可读一些。

再说开去,中文编程时,大可以跳出英文命名的思维定势。比如在设计中文编程语言时,不妨就可以考虑是否支持、支持哪些标点使用于标识符。

也可以重新考虑是否需要沿用流行英文编程语言中的标点用法。比如这里提到的,对象.方法中的句点对于英文来说也许是必需的分隔,但对中文来说就未必。