Pourquoi les programmeurs Java aiment-ils nommer une variable «clazz»? [fermé]

156

J'ai vu beaucoup de codes avec une déclaration comme Class clazz, d'où cela vient-il? Est-ce une sorte de convention? Je pense que «clazz» n'est même pas un mot anglais, n'a aucun sens, comment tant de programmeurs peuvent-ils nommer un mauvais nom par hasard?

Scieur
la source
36
n'oubliez pas le klass!
Peter Recore
24
@Peter: bon point, c'est un klassique.
Président James K. Polk
13
Aleksey Shipilev a proposé d'utiliser l' сlassépeautre avec un cyrillique сcomme alternative.
Stuart marque le
12
@StuartMarks Je rejette cette proposition. De rien.
Goran Vasic
16
En Angleterre, nous utilisons normalement «clarse».
John Gowers

Réponses:

173

clazza été utilisé en Java à la place du mot réservé «classe» depuis JDK 1.0. "class" est ce que vous voulez, mais abréger ou insérer des fichiers indésirables ("a", "the", "_", etc.) réduit la clarté. clazzdit juste la classe. Les anglophones «internationaux» (ceux qui lisent l'anglais britannique et américain) sont habitués à transposer «s» et «z».

Étant donné que Java a divulgué la source et une culture appropriée dès le début, du code Java et des didacticiels intéressants reprennent les mêmes conventions. C'est l'un des avantages de l'écosystème Java, qui, à mon avis, a joué un rôle important dans son succès.

Tom Hawtin - Tacle
la source
82
Il est difficile de convenir que "clazz" est plus clair que "_class" ou "myClass". Si j'avais vu "_class" dans le code, l'intention aurait été plus évidente qu'un non-mot qui m'a envoyé vers Google (et vers cette page).
uscjeremy
@uscjeremy: Personnellement, je préfère l'utilisation de traits de soulignement à des identifiants qui ne diffèrent que par la casse. Si je concevais un langage, je le ferais être un hybride de règles sensibles à la casse et non sensibles à la casse: tout identifiant ne pourrait être utilisé que dans exactement la casse d'origine, mais la déclaration de tout identifiant masquerait tout identifiant préexistant qui ne différait que par le boîtier. Avoir Foodéfini au niveau de la portée de la classe et foode la portée de la variable locale devrait être légal, mais toutes les références à la variable de la portée de la classe dans la portée du local devraient l'exiger this.Foo. Une telle règle serait ...
supercat
@uscjeremy: ... à mon avis, combinez les avantages des langages sensibles à la casse et non sensibles à la casse. Les langues insensibles à la casse ont l'avantage que les lectures phonétiques d'un nom d'identifiant "foo" seront sans ambiguïté sans avoir à dire "uppercase foo" ou "minuscule foo", mais il n'y a aucune vraie raison d'autoriser l'épellation d'un identifiant à someThingcertains endroits et sOmEtHiNgchez les autres.
supercat
1
@supercat La catégorie générale de ponctuation Unicode est ce que je cherchais. unicode.org/faq/punctuation_symbols.html / Je ne concevoirais pas C #. En Java, vous vous en sortez avec une méthode appelée fnordet un champ appelé fnordsans aucun problème, capitalisation ou mots absurdes. Je pense que cela suffira comme contre-exemple.
Tom Hawtin - tackline
3
@uscjeremy Il est difficile de convenir que "clazz" est plus clair que "_class" ou "myClass" - Vrai. Cependant, utiliser "_class" ne serait pas une option, car il entre clairement en conflit avec les conventions de dénomination Java .
MC Emperor
73

Parce qu'ils ne peuvent pas utiliser le mot qu'ils veulent utiliser class. C'est réservé.

Président James K. Polk
la source
2
Ouais, je sais, mais je pense qu'épeler un droit variable serait plus significatif.
Sawyer
22
@Tony - comment pouvez-vous dire "vous savez" et exiger que le nom de la variable soit épelé directement dans le même commentaire? Ils sont mutuellement exclusifs.
duffymo
3
@Tony, vous ne pouvez tout simplement pas nommer une variable "classe", c'est un mot réservé.
Steve Kuo
6
@duffymo: C'est drôle. Je sais que la classe est un mot réservé, et j'exige en effet que le nom de la variable soit correctement orthographié, pourquoi s'excluent-ils mutuellement ?? devez-vous l'appeler «classe»?
Sawyer
13
Je suppose que Tony veut que la variable soit nommée quelque chose de plus descriptif que simplement "classe". Par exemple, «x» pourrait être épelé correctement, mais cela ne signifie pas autant que «numberOfComments»
Peter Recore
17

C'est simplement parce que 'class' est un mot clé réservé, donc Class classn'est pas autorisé. Par conséquent, vous verrez Class clazzou Class cls.

sfussenegger
la source
7
Je ne peux pas penser à une raison pour nommer une classe Classcar il y a tellement de classes dans un projet donné qu'appeler une classe LA classe semble un peu inutile. Je ne peux pas non plus penser à une raison d'appeler un VARIABLE class...
Blindy
8
Vous n'avez pas nommé de classe Class, c'est l'API java.
Sawyer
3
@Blindy: Et java.lang.Class? Vous n'avez pas beaucoup de choix là-bas.
Dan Dyer
14
@Blindy: Il existe déjà une classe appelée Class, qui fait référence à la classe d'un objet. La raison parfaite pour avoir une variable appelée «classe» est lorsque vous travaillez avec la classe d'un objet (c'est-à-dire: déterminer le type d'un objet)
Révérend Gonzo
3
Je considérerais informatif ClassInformation, ClassMetadataou quelque chose de similaire. Chaque classe est une classe, mais vous ne les nommez pas toutes Class, vous les nommez par leur fonction principale.
Blindy
7

Cela se résume au compilateur réel et à sa capacité à distinguer ce que signifie un jeton dans son contexte. Cependant, dans ce cas particulier, c'est l' incapacité du compilateur à distinguer ce que classsignifie le jeton dans un contexte différent. C'est une règle dure et rapide qui class, quel que soit son contexte, est utilisée pour désigner la déclaration d'une classe, et en tant que telle, c'est un réservé mot . C'est aussi simple et aussi bas que possible.

Si vous vous sentez obligé, vous pouvez écrire votre propre compilateur Java pour inclure une règle contextuelle qui vous permettra de l'utiliser classcomme nom de variable. Bien que je pense que ce serait une bien meilleure utilisation de votre temps de simplement utiliser clazzou klass- ce serait probablement aussi bon pour votre santé.

John
la source
3
Un mot sur l' incapacité : Java a été conçu comme un langage à mots réservés . Les langages de mots non réservés peuvent compiler et mettre en évidence avec succès des instructions telles que if if then then else else , malgré la (non) lisibilité. Ainsi, le compilateur a été délibérément laissé incapable
usr-local-ΕΨΗΕΛΩΝ
4

d'où cela vient-il?

Je l'ai vu d'abord sur les énigmes de Josh Bloch. Mais je suis presque sûr qu'il a été utilisé beaucoup plus tôt par d'autres développeurs. Josh Bloch vient de le rendre plus célèbre.

romain
la source
4

Java n'a pas de fonctionnalité qui vous permet d'utiliser un mot-clé comme identifiant, contrairement à C # avec son @préfixe (par exemple, @classest un identifiant valide.)

finnw
la source
2
C'est un identifiant différent. classet $classsont tous deux des identifiants valides (mais différents) dans la machine virtuelle Java. Il n'y a pas d'identifiant que vous pouvez écrire dans un fichier source Java qui se traduit "class"dans la VM.
finnw
2

C'est juste un mot anglais remplacé (Equavalent) par Keyword Class Keyword, pour faire comprendre aux gens qu'il s'agit d'une classe. et c'est presque pour augmenter la lisibilité du Code

Rien de grand logique impliqué dans ça

gmhk
la source
2

La déclaration Class clazzest populaire dans le monde Java, mais elle peut être gênante pour les nouveaux arrivants et les vérificateurs orthographiques. J'ai entendu des gens dire que cela devrait être évité selon le principe du moindre étonnement .

Comme il est possible de dire qu'un Classobjet représente un type , je préfère personnellement déclarer des variables telles que Class type.

Michal Kordas
la source
0

Nous utilisons clazz car la classe est un en-tête de type. Par exemple, vous utilisez la classe ici:

public class HelloWorld {

et ici:

Object.class.getName();

Donc, malheureusement, nous devons utiliser des noms alternatifs tels que clazz.

Romejanic
la source
-3

En termes simples, classa une classe qui clazzn'en a pas.

user1843640
la source