Имена переменных Java Unicode
Я попал в интересную дискуссию на форуме, где мы обсуждали именование переменных.
Помимо соглашений, я заметил, что допустимо, чтобы переменная имела имя символа Unicode, например, допустимо следующее:
int \u1234;
Однако, если я, например, дал ему имя #, он выдаст ошибку. Согласно учебному пособию Sun, он действителен, если "начиная с буквы, знака доллара"$"или символа подчеркивания"_"".
Но юникод 1234 - это какой-то эфиопский символ. Так что же на самом деле определяется как "буква"?
2 ответа
Стандарт Unicode определяет, что считать буквой.
Из спецификации языка Java, раздел 3.8:
Буквы и цифры могут быть взяты из всего набора символов Unicode, который поддерживает большинство сценариев написания, используемых в современном мире, включая большие наборы для китайского, японского и корейского языков. Это позволяет программистам использовать идентификаторы в своих программах, написанные на их родных языках.
"Письмо Java" - это символ, для которого метод Character.isJavaIdentifierStart(int) возвращает true. "Буква или цифра Java" - это символ, для которого метод Character.isJavaIdentifierPart(int) возвращает true.
От Character
документация для isJavaIdentifierPart
:
Определяет, может ли символ (кодовая точка Unicode) быть частью идентификатора Java как отличный от первого символа. Символ может быть частью идентификатора Java, если выполняется любое из следующих условий:
- это письмо
- это символ валюты (например, $)
- это соединительный знак препинания (например, _)
- это цифра
- это цифровая буква (например, римская цифра)
- это комбинационный знак
- это знак без пробелов
- isIdentifierIgnorable (codePoint) возвращает true для символа
Персонажи Unicode попадают в классы персонажей. Есть набор символов Unicode, которые попадают в класс "буква".
Определяется по Character.isLetter(c)
для Java. Но для идентификаторов, Character.isJavaIdentifierStart(c)
а также Character.isJavaIdentifierPart(c)
более актуальны.
Для соответствующей спецификации Unicode, смотрите это.