Имена переменных 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, смотрите это.

Другие вопросы по тегам