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

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

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

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

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

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

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

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

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

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

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

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

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

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

这取决于:

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

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

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

在我常规的en-us键盘上,我知道键入字母ç的唯一方法是按住alt,然后在数字键盘上按0227,或者复制并粘贴。

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

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

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

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

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

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