I недавно узнал , что Юникод разрешен в исходном коде Java не только как символы Юникода (например, 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 даже отмечал синтаксическую ошибку (хотя компиляция не была проблемой).
Наконец, эта функция плохо документирована и не является общепринятой.Почему программист использует в своем коде что-то, что другие программисты не смогут распознать и понять?На самом деле, я даже не смог найти что-то об этом на вопросе Скрытые возможности Java .
Мой вопрос таков:
Почему Java разрешает экранировать последовательности Unicode дляиспользоваться в синтаксисе?Какие «плюсы» этой функции позволили ей остаться частью Java, несмотря на многие «минусы»?