gpt4 book ai didi

java - 使用 unicode 符号作为 Java 标识符是个好主意吗?

转载 作者:IT老高 更新时间:2023-10-28 21:07:57 25 4
gpt4 key购买 nike

我有一段代码如下所示:

double Δt = lastPollTime - pollTime;
double α = 1 - Math.exp(-Δt / τ);
average += α * (x - average);

在 Java 标识符中使用 unicode 字符是多么糟糕的想法?或者这完全可以接受?

最佳答案

这是个坏主意,出于各种原因。

  • 很多人的键盘不支持这些字符。如果我要在 qwerty 键盘(或任何其他没有希腊字母的键盘)上维护该代码,我必须一直复制和粘贴这些字符。

  • 某些人的编辑器或终端可能无法正确显示这些字符。例如,一些编辑器(不幸的是)仍然默认使用一些 ISO-8859(拉丁)变体。 ASCII 仍然如此流行的主要原因是它几乎总是有效。

  • 即使可以正确渲染字符,也可能会引起混淆。 Straight from Sun (强调我的):

    Identifiers that have the same external appearance may yet be different. For example, the identifiers consisting of the single letters LATIN CAPITAL LETTER A (A, \u0041), LATIN SMALL LETTER A (a, \u0061), GREEK CAPITAL LETTER ALPHA (A, \u0391), CYRILLIC SMALL LETTER A (a, \u0430) and MATHEMATICAL BOLD ITALIC SMALL A (a, \ud835\udc82) are all different.

    ...

    Unicode composite characters are different from the decomposed characters. For example, a LATIN CAPITAL LETTER A ACUTE (Á, \u00c1) could be considered to be the same as a LATIN CAPITAL LETTER A (A, \u0041) immediately followed by a NON-SPACING ACUTE (´, \u0301) when sorting, but these are different in identifiers.

    这绝不是一个虚构的问题:α(U+03b1 GREEK SMALL LETTER ALPHA)和⍺(U+237a APL FUNCTIONAL SYMBOL ALPHA)是不同的字符!

  • 没有办法判断哪些字符是有效的。您的代码中的字符可以工作,但是当我使用 FUNCTIONAL SYMBOL ALPHA 时,我的 Java 编译器会提示“非法字符:\9082”。即使功能符号在此代码中更合适。除了 asking 之外,似乎没有关于哪些字符可以接受的可靠规则。 Character.isJavaIdentifierPart().

  • 尽管您可以编译它,但似乎所有 Java 虚拟机实现都已使用 Unicode 标识符进行了严格测试。如果这些字符只用于方法范围内的变量,它们应该被编译掉,但如果它们是类成员,它们最终也会出现在 .class 文件中,可能会破坏你的程序JVM 实现。

关于java - 使用 unicode 符号作为 Java 标识符是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com