web-dev-qa-db-fra.com

Syntaxe Java héritée

En lisant le document Java Code Conventions de 1997 , je l’ai vu dans un exemple de P16 sur les conventions de nommage des variables:

int i;
char *cp;
float myWidth;

La deuxième déclaration est intéressante - pour moi, cela ressemble beaucoup à la façon dont vous pourriez déclarer un pointeur en C. Cela donne une erreur de syntaxe lors de la compilation sous Java 8.

Juste par curiosité: cette syntaxe était-elle toujours valide? Si oui, qu'est-ce que cela voulait dire?

34
Harry King

C'est une erreur de copier-coller, je suppose.

À partir de JLS 1 (qui est vraiment pas facile à trouver!), La section sur les déclarations de variables locales indique qu’une telle déclaration est, en substance, un type suivi d’un identifiant. Notez qu'il n'y a pas de référence spéciale faite à propos de *, mais qu'il y a une référence spéciale faite à [] (pour les tableaux).

char est notre type, la seule possibilité qui reste est que *cp soit un identifiant. La section sur Identifiers states 

Un identifiant est une séquence de longueur illimitée de lettres Java et Java chiffres, dont le premier doit être une lettre Java . 
... 
Une lettre Java est un caractère pour lequel la méthode Character.isJavaLetter ( §20.5.17 ) renvoie true.

Et le JavaDoc pour cette méthode déclare:

Un caractère est considéré comme une lettre Java si et seulement si c'est un lettre ( §20.5.15 ) ou est le caractère de signe dollar '$' (\u0024) ou le caractère caractère de soulignement ("ligne inférieure") '_' (\u005F).

alors foo, _foo et $foo étaient bien, mais *foo n'a jamais été valide.


Si vous souhaitez un guide de style Java plus à jour, le guide de style de Google est sans doute le plus référencé.

26
Michael

Il semble qu'il s'agisse d'un document de style de codage générique pour les langages de type C, avec quelques ajouts spécifiques à Java. Voir, par exemple, également la page suivante:

N'utilisez pas l'opérateur d'affectation dans un endroit où il peut être facilement confondu avec l'opérateur d'égalité. Exemple:

if (c++ = d++) { // AVOID! Java disallows.
    …
}

Cela n'a pas de sens de dire à un programmeur d'éviter de toute façon une erreur de syntaxe. La seule conclusion que nous pouvons en tirer est que le document n'est pas spécifique à Java à 100%.

Une autre possibilité est qu’il s’agisse d’un style de codage pour l’ensemble du système Java, y compris les parties C++ de JRE et JDK.

Notez que Sun a abandonné le document de style de codage bien avant l'arrivée d'Oracle. Ils se sont limités à préciser ce que la langue est , pas comment l'utiliser.

5
Jörg W Mittag

Syntaxe invalide!

C'est juste une erreur de copier/coller.

Le jeton (*) dans les variables est applicable uniquement en C, car il utilise des pointeurs, alors que Java ne l’utilise jamais.

Et Token (*) n’est utilisé que comme opérateur en Java.

0
Karthik P