我有一段代码如下:
double Δt = lastPollTime - pollTime;
double α = 1 - Math.exp(-Δt / τ);
average += α * (x - average);
在Java标识符中使用unicode字符的想法有多糟糕?或者这完全可以接受?
答案 0 :(得分:34)
出于各种原因,这是一个坏主意。
许多人的键盘不支持这些字符。如果我要在qwerty键盘(或任何其他没有希腊字母)上维护该代码,我必须一直复制并粘贴这些字符。
某些人的编辑或终端可能无法正确显示这些字符。例如,一些编辑(不幸的是)仍默认为某些ISO-8859(拉丁语)变体。 ASCII仍然如此普遍的主要原因是它几乎总是有效。
即使可以正确呈现字符,也可能会造成混淆。 Straight from Sun(强调我的):
具有相同外观的标识符可能会有所不同。例如,标识符包含单个字母LATIN CAPITAL LETTER A(A,\ u0041),LATIN SMALL LETTER A(a, \ u0061),GREEK CAPITAL LETTER ALPHA(A,\ u0391),CYRILLIC SMALL LALLTER A(a,\ u0430)和MATHEMATICAL BOLD ITALIC SMALL A(a,\ ud835 \ udc82)都不同。
...
Unicode复合字符与分解字符不同。例如,拉丁文大写字母A ACUTE(Á,\ u00c1)可被视为与拉丁文大写字母A(A)相同,\ u0041)在排序时紧接着是非间距ACUTE(',\ u0301),但这些标识符不同。
这绝不是一个想象中的问题:α(U + 03b1 GREEK SMALL LETTER ALPHA)和⍺(U + 237a APL FUNCTIONAL SYMBOL ALPHA)是不同的字符!
无法确定哪些字符有效。代码中的字符可以正常工作,但是当我使用FUNCTIONAL SYMBOL ALPHA时,我的Java编译器会抱怨“非法字符:\ 9082”。即使功能符号在此代码中更合适。似乎没有可靠的规则可以接受哪些字符,asking Character.isJavaIdentifierPart()
除外。
即使您可以将其编译,但似乎所有Java虚拟机实现都已使用Unicode标识符进行了严格测试。如果这些字符仅用于方法范围中的变量,那么它们应该被编译掉,但是如果它们是类成员,它们最终也会出现在.class
文件中,可能会在错误的JVM实现上破坏您的程序。 / p>
答案 1 :(得分:6)
看起来很好,因为它使用了正确的符号,但你的团队中有多少人会知道这些符号的按键?
我会使用英语表示只是为了更容易输入。而其他人可能没有支持在他们的电脑上设置这些符号的字符集。
答案 2 :(得分:6)
如果您的工作组可以接受,那是完全可以接受的。这里的很多答案都是以傲慢的假设运作,即每个人都用英语编程。非英语程序员这些日子并不罕见,而且他们的加速率也越来越少。当他们拥有完美的语言时,他们为什么要限制自己使用英语版本?
除了英语国家的傲慢外,使用非英语标识符还有其他正当理由。例如,如果您正在编写数学软件包,那么如果您的目标是数学家,那么使用希腊文就可以了。当每个人都能理解“Δ”并且可能更快地输入时,为什么人们会在你的工作组中输入“delta”?几乎任何问题领域都有自己的行话,有时候行话用拉丁字母表示。为什么在地球上你想尝试将所有东西都塞进ASCII?答案 3 :(得分:4)
该代码可以阅读,但维护起来很糟糕 - 我建议使用简单的英文标识符,如下所示:
double deltaTime = lastPollTime - pollTime;
double alpha = 1 - Math.exp(-delta....
答案 4 :(得分:2)
这是个好主意。诚实。 当时并不容易实现。让我们继续参考它。我会爱看到三角形,圆形,正方形等......作为程序代码的一部分。但就目前而言,请尝试重新编写它,就像Crozin所说的那样。
答案 5 :(得分:1)
为什么不呢? 如果处理该代码的人可以轻松输入,那么这是可以接受的。
但上帝帮助那些无法显示unicode或无法输入unicode的人。
答案 6 :(得分:1)
在一个完美的世界中,这将是推荐的方式。
不幸的是,当你移动到普通的7位ASCII字符(UTF-8不同于ISO-Latin-1不同于UTF-16等)时会遇到字符编码,这意味着你最终会遇到问题。从Windows迁移到Linux时,这种情况发生在我身上。我们的国家斯堪的纳维亚人物在这个过程中破裂了,但幸运的是只有弦乐。然后我们使用\ u编码来表示所有这些。
如果您绝对可以肯定您永远不会遇到这样的事情 - 例如,如果您的文件包含适当的BOM - 那么无论如何都要这样做。它将使您的代码更具可读性。如果至少有最小的疑问,那就不要了。
(请注意,“使用非英语语言”是另一回事。我只是想用符号代替字母)。