2009-09-14 9 views
13

Je suis entré dans une discussion intéressante dans un forum où nous avons discuté de la dénomination des variables.Noms de variables Java Unicode

Conventions de côté, je remarque qu'il est légal pour une variable d'avoir le nom d'un caractère Unicode, par exemple ce qui suit est légal:

int \u1234; 

Cependant, si je par exemple lui a donné le nom # , cela produit une erreur. Selon Sun's tutorial il est valide si "en commençant par une lettre, le signe dollar" $ ", ou le caractère de soulignement" _ "."

Mais l'Unicode 1234 est un caractère éthiopique. Alors qu'est-ce qui est vraiment défini comme une "lettre"?

Répondre

18

La norme Unicode définit ce qui compte comme une lettre.

De l'Java Language Specification, section 3.8:

lettres et chiffres peuvent être tirées de l'ensemble de caractères Unicode, qui prend en charge la plupart des scripts d'écriture dans une utilisation dans le monde d'aujourd'hui, y compris les grands ensembles pour le chinois, Japonais, et coréen. Cela permet aux programmeurs d'utiliser les identifiants dans leurs programmes écrits dans leur langue maternelle.

A "lettre Java" est un caractère pour lequel la méthode Character.isJavaIdentifierStart (int) renvoie true. Une "lettre-ou-chiffre Java" est un caractère dont la méthode Character.isJavaIdentifierPart (int) renvoie la valeur true.

De l'Character Documenation pour isJavaIdentifierPart:

détermine si le caractère (point de code Unicode) peut faire partie d'un identificateur Java comme autre que le premier caractère. Un personnage peut faire partie d'un identifiant Java si l'une des conditions suivantes sont vraies:

  • est une lettre
  • est un symbole monétaire (comme « $ »)
  • il est une connexion caractère de ponctuation (comme « _ »)
  • il est un chiffre
  • est une lettre numérique (comme un caractère chiffre romain)
  • est une marque combinant
  • est un retourne vrai pour le caractère
3

caractères Unicode tombent dans les classes de caractères marque non-espacement

  • isIdentifierIgnorable (CodePoint). Il y a un ensemble de caractères Unicode qui tombent dans la "lettre" de la classe.

    Déterminé par Character.isLetter(c) pour Java. Mais pour les identifiants, Character.isJavaIdentifierStart(c) et Character.isJavaIdentifierPart(c) sont plus pertinents.

    Pour la spécification Unicode correspondante, voir this.

  • Questions connexes