Почему Java разрешает экранированные символы Юникода в исходном коде?

Я недавно узнал , что Unicode разрешен в исходном коде Java не только как символы Unicode (например, double π = Math.PI; ), но также как экранированные последовательности (например, double \ u03C0 = Math.PI; ).

Первый вариант имеет смысл для меня - он позволяет программистам называть переменные и методы на любом международном языке по своему выбору. Однако я не вижу практического применения второго подхода.

Вот несколько фрагментов кода для иллюстрации использования, протестированных с Java SE 6 и NetBeans 6.9.1:

Этот код распечатает 3.141592653589793

public static void main(String[] args) {
    double π = Math.PI;
    System.out.println(\u03C0);
}

Объяснение: π и \ u03C0 - это один и тот же символ Unicode

Этот код ничего не распечатает

public static void main(String[] args) {
    double π = Math.PI; /\u002A
    System.out.println(π);

    /* a comment */
}

Объяснение: Приведенный выше код на самом деле кодирует:

public static void main(String[] args) {
    double π = Math.PI; /*
    System.out.println(π);

    /* a comment */
}

Что комментирует сообщение о печати. ​​

Только из моих примеров я заметил ряд потенциальных проблем с этой функцией языка.

Во-первых, плохой программист мог бы использовать его для тайных комментариев. фрагментов кода или создать несколько способов идентификации одной и той же переменной. Возможно, существуют другие ужасные вещи, о которых я не думал.

Во-вторых, похоже, что среди IDE отсутствует поддержка. Ни NetBeans, ни Eclipse не предоставили правильного выделения кода для примеров. Фактически, NetBeans даже пометил синтаксическую ошибку (хотя компиляция не была проблемой).

Наконец, эта функция плохо документирована и не является общепринятой. Зачем программисту использовать в своем коде то, что другие программисты не смогут распознать и понять? Фактически, я не мог What are some "pros" of this feature that have allowed it to stay a part Java, despite its many "cons"?

64
задан Community 23 May 2017 в 11:54
поделиться