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

时间:2008-09-14 20:28:43

标签: c# java coding-style

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

11 个答案:

答案 0 :(得分:32)

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

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

答案 1 :(得分:10)

我会说这完全取决于谁在使用代码库。

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

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

答案 2 :(得分:9)

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

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

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

答案 3 :(得分:8)

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

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

答案 4 :(得分:4)

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

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

答案 5 :(得分:2)

取决于:

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

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

答案 6 :(得分:2)

如果你过了the other prerequisites,那么你就有一个额外的(恕我直言)更重要的一个 - 这个符号输入有多困难。

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

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

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

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

ä/æ-> ae,ö/ø-> oe,å-> aa,ü-> ue

等以防万一其他人发现在不更改键盘/键盘映射的情况下很难键入原始字母的情况。想一下,如果您突然不得不使用开发人员使用第三种语言(例如包括法语ç)的代码库而没有这样做。.在两个以上的键映射之间进行切换以有效地键入内容,对我来说是很痛苦的。 / p>