你应该在Java / C#中使用国际标识符吗?

你应该在Java / C#中使用国际标识符吗?

Should you use international identifiers in Java/C#?

C#和Java几乎允许在类名,方法名,局部变量等中使用任何字符。使用非ASCII字符,测试不良编辑器和分析工具的界限并使某些人难以阅读是不好的做法, 还是美国的傲慢是反对的唯一论据?


我会坚持使用英语,只是因为你通常不知道谁在编写代码,并且因为构建/测试/错误跟踪进度中使用的某些第三方工具可能会有问题。打字??ü?在非德语键盘上只是一个PITA,我只是相信任何参与软件开发的人都应该说英语,但也许这只是我作为一个非母语为英语的人的傲慢。

你所谓的"美国傲慢"不是你的程序是否使用国际变量名,而是当你的程序认为"W?hrung"和"Wahrung"是相同的词时。


如果您的业务是非英语用户,并且您认为Domain Driven Design对此有所了解,那么还有另一个方面:作为开发人员,我们如何使用与我们的业务相同的域语言而无需任何翻译开销?

这不仅意味着语言之间的翻译,比如英语和挪威语,也包括不同语言之间的翻译。对于我们的实体类和服务,我们应该使用与业务完全相同的单词。

我发现更容易让步并使用我的母语。既然我的代码使用了相同的单词,那么与我的域专家进行对话就更容易了。过了一段时间,你习惯了它,就像你习惯于没有匈牙利符号的代码一样。


我要说这完全取决于谁在代码库上工作。

如果您有一小组开发人员都共享一种共同语言,并且您从未计划需要任何不会使用该语言的人来处理代码,那么请继续使用您想要的任何字符。

如果你需要让不同文化和语言的人在代码上工作,那么最好坚持使用英语,因为它是世界上几乎所有人的共同点。


我曾经在一个开发团队中工作,他们愉快地用任何命名(以及任何其他编码)惯例来擦除他们的驴子。信不信由你,不得不应对代码中的?和?是我辞职的一个因素。虽然我是芬兰语,但我更喜欢使用美式键盘设置编写代码,因为在芬兰语键盘中使用卷曲和方括号是很痛苦的(尝试使用正确的alt和7和0作为curlies)。

所以我说坚持使用ascii字符。


这是我使用非ASCII标识符的示例,因为我发现它比用英文名称替换希腊字母更具可读性。即使我的键盘上没有θ或φ(我依靠复制粘贴。)

然而,这些都是局部变量。我会将非ASCII标识符保留在公共接口之外。


如果你超越了其他先决条件,那么你就有一个额外的(恕我直言)更重要 - 一个符号输入有多难。

在我常规的en-us键盘上,我知道输入字母的唯一方法是什么?是保持alt,并在数字小键盘上按0227,或复制和粘贴。

这将是快速打字方式的巨大障碍。如果你没有被迫,你不想用这样的琐碎事情减慢编码速度。国际键盘可能会缓解这个问题,但如果您的笔记本电脑上没有国际键盘等,那么会发生什么?


这取决于:

  • 您的团队是否符合任何需要使用ASCII的现有标准?
  • 您的代码是否会被不熟悉您母语的人重复使用或阅读?
  • 您是否设想过需要在线寻求帮助的场景,因此无法按原样复制粘贴代码示例?
  • 您确定您的整套工具支持代码编码吗?

如果对上述任何一个回答"是",请仅保留ASCII。如果没有,请自担风险。


部分问题是Java / C#语言及其库基于英语单词,如iftoString()。在阅读代码时,我个人不想在非英语和英语之间切换。

但是,如果您的数据库,UI,业务逻辑(包括隐喻)已经使用某些非英语语言,则无需将每个方法名称和变量翻译成英语。


正如已经指出的,除非方法名称大多与语言匹配,否则在阅读时不断切换语言有点奇怪。

对于斯堪的纳维亚语言和德语,我可以说,因此,我至少建议使用标准替代,即。

?/? - > ae,?/? - > oe ,? - > aa,ü - >你

以防其他人可能会发现在没有键盘/键盘更改的情况下输入原始字母很困难。想想你是否突然不得不使用代码库,其中开发人员使用第三种语言(例如包括法语?)并且没有这样做。在两个以上的键盘图之间进行切换以便有效输入将是痛苦的。


还有另一种使用非ASCII字符的hazzard,尽管它可能只会在不起眼的情况下咬人。允许的字符是根据方法Character.isJavaIdentifierStart(int)和Character.isJavaIdentifierPart(int)定义的,它们是根据Unicode定义的。但是,所使用的Unicode的确切版本取决于Java平台版本,如java.lang.Character文档中所指定。

由于字符属性从一个Unicode版本稍微改变到下一个版本,因此可能(但可能非常不可能)您可以拥有在一个Java版本中有效但在下一个版本中无效的标识符。


我会坚持使用ASCII字符,因为如果您的开发团队中的任何人使用的SDK仅支持ASCII,或者您希望使您的代码成为开源代码,则可能会出现很多问题。就个人而言,即使你不打算将任何不会说这种语言的人带到项目中,我也不会这样做,因为你正在经营一家企业,在我看来,经营企业的人希望他的企业能够扩展在这个时代,这意味着超越国界。我的观点是英语是领域的语言,即使你用不同的语言命名变量,在你的编程中使用任何非ASCII字符也没有意义。如果您正在处理UTF8数据,请使用语言来处理它:我的iPhone程序(涉及电话和服务器之间的大量用户数据)具有完整的UTF8支持,但源代码中没有UTF8 。它似乎打开了这么大的蠕虫几乎没有任何好处。


推荐阅读

    linux命令替换字符串?

    linux命令替换字符串?,字符串,文件,批量,首次,数据,命令,内容,方法,用字,结

    linux命令中转义字符?

    linux命令中转义字符?,标准,本行,密码,字符,电脑,系统,环境,数据,命令,终端,l

    linux命令行字符颜色?

    linux命令行字符颜色?,系统,地址,代码,信息,数字,软件,通用,电脑,颜色,命令,l

    linux彩色字符命令?

    linux彩色字符命令?,数字,颜色,命令,字符,文字,终端,控制台,环境变量,白色,

    linux中替换字符命令?

    linux中替换字符命令?,工作,地址,系统,命令,资料,数据,信息,商业,管理,目录,L

    linux拼接字符串命令?

    linux拼接字符串命令?,系统,工作,代码,工具,名称,信息,地址,时间,数据,命令,l

    linux图形转字符命令?

    linux图形转字符命令?,系统,电脑,密码,界面,情况,地方,工具,图形界面,字符,

    linux隐藏字符的命令?

    linux隐藏字符的命令?,工作,地址,系统,发行,信息,标准,管理,命令,目录,文件,

    linux命令行最大字符?

    linux命令行最大字符?,系统,工作,数字,地址,等级,设备,软件,信息,标准,设计,l

    添加字符串命令linux?

    添加字符串命令linux?,情况,名称,文件,位置,名字,地方,连续,信息,命令,内容,L

    linux命令行大字符?

    linux命令行大字符?,工作,地址,系统,信息,管理,第一,发行,在线,最新,标准,lin

    linux命令查找字符串?

    linux命令查找字符串?,工具,信息,命令,字符串,系统,工作,文件,范本,样式,文

    linux命令字符搜索?

    linux命令字符搜索?,系统,工具,命令,灵活,信息,工作,字符串,文本,文件,模式,l

    linux大写字符命令?

    linux大写字符命令?,系统,工作,信息,档案,数字,地址,命令,名称,密码,时间,lin

    linux字符匹配命令?

    linux字符匹配命令?,工作,地址,管理,系统,工具,标准,命令,目录,信息,文件,Lin

    linux字符替换命令?

    linux字符替换命令?,系统,数据,软件,字符串,文件,命令,实时,首次,位置,工作,l

    linux删除字符的命令?

    linux删除字符的命令?,系统,软件,名称,文件,档案,不了,命令,字符,目录,字母,l

    linux命令行字符错乱?

    linux命令行字符错乱?,系统,亚洲,第一,不了,状态,异常,软件,管理,字符,命令,l

    linux字符命令界面?

    linux字符命令界面?,系统,密码,位置,首页,工具,情况,终端,服务,评论,电脑,lin

    linux按字符排序命令?

    linux按字符排序命令?,标准,命令,时间,情况,文件,数字,基础,状态,系统,功能,i