我们在实际在项目中,我们一般用到枚举(enum)都是用来标识状态,但是有个比较恶心人的地方,就是要在页面上面显示出状态的中文名称。
一般做法是在Model里面写一个方法,判断状态并返回对应的中文。其实并没有多少行代码,但是却很不优雅。
比如我有个Order对象,它有个属性是state枚举,我需要在界面上显示出state对应的中文名称,如果state为空,则显示“不知道”,那我要这么做:
如果此时我还有个OrderDetail对象,里面也有state属性,枚举值和Order对象是一样的,那我也需要在OrderDetail里面写一个一样的getStateText()方法,或者把这个方法抽出来放到一个公共的文件里面。
我个人认为比较好的解决办法:使用中文枚举
直接用中文作为枚举名称,不仅不需要去考虑中英文的转化问题,减少了代码量,而且还使这个state更加方便我们中文背景下的程序猿理解。并且Swfit对于中文的支持十分友好,中文枚举也不会对代码补全造成影响,十分的方便。
说到这里,我想说一下我对中文变量名/拼音变量名的理解。
1、代码的变量名要见名知义,是要人看得懂,所以并不是一定要求说要用英文。有些专业领域的名词,用英文很长很长不说,还可能第二天你自己就看不懂这英文是啥了,于是每次读代码都要谷歌翻译一下?
let 非点餐且缓存过: Bool = (cachedPdt?.groupProducts.count == 0 && cachedPdt != nil && cachedPdt?.productNum != 1)
let 在购物车页面操作: Bool = (product.id != "" && !product.id.hasPrefix("local"))
if 非点餐且缓存过 || 在购物车页面操作 {
}else{
}
比如这段代码,由于判断太长,分开成两个判断条件。如果用英文:
let notOrderMealAndCached: Bool = (cachedPdt?.groupProducts.count == 0 && cachedPdt != nil && cachedPdt?.productNum != 1)
let operateOnShoppingCartPage: Bool = (product.id != "" && !product.id.hasPrefix("local"))
if notOrderMealAndCached || operateOnShoppingCartPage {
}else{
}
显然用中文的那段代码可以一眼就看出判断含义。
程序是给自己和同事看的,如果你和同事都是中国人,在为了便于代码阅读的目的下,适当下用一下中文是没问题的,而且这样变量名本身就是注释,省略写注释的时间。(如果是去Github贡献代码,那就全用英文,具体情况具体分析)
当然,我说的是在用英文有困难或者用英文反而不利于代码理解的情况下,普通情况下我还是照例用英文。
其实反过来想,各种代码编辑器IDE开发工具从一开始只支持英文变量名方法名到如今可以用中文乃至于更多奇怪的字符(比如emoji)来做变量名方法名,说明程序设计者并没有规定一定要用英文,恰恰相反,设计者们在努力让开发工具和语言适应各个国家的语言文字,减轻我们这样的开发者的负担。而我们如果只刻板地知道“写程序必须要用英文”而不知变通,那么我们不仅在给自己找麻烦,也辜负了设计者们的努力。