¿Por qué a los programadores de Java les gusta nombrar una variable "clazz"? [cerrado]

156

He visto que muchos códigos tienen declaraciones como Class clazz, ¿de dónde se origina esto? ¿Es esto algún tipo de convención? Creo que 'clazz' ni siquiera es una palabra en inglés, no tiene ningún significado, ¿cómo pueden tantos programadores nombrar un nombre incorrecto por coincidencia?

Aserrador
fuente
36
no te olvides de klass!
Peter Recore
24
@Peter: buen punto, eso es clásico.
Presidente James K. Polk
13
Aleksey Shipilev ha propuesto utilizar la сlassortografía con un cirílico сcomo alternativa.
Stuart Marks
12
@StuartMarks Estoy rechazando esa propuesta. De nada.
Goran Vasic
16
En Inglaterra, normalmente usamos 'clarse'.
John Gowers

Respuestas:

173

clazzse ha utilizado en Java en lugar de la palabra reservada "clase" desde JDK 1.0. "clase" es lo que desea, pero abreviar o insertar basura ("a", "el", "_", etc.) reduce la claridad. clazzsolo dice clase. Los hablantes de inglés "internacionales" (los que leen inglés británico y estadounidense) están acostumbrados a transponer 's' y 'z'.

Dado que Java ha revelado la fuente y una cultura adecuada desde el principio, el código y los tutoriales de Java que valen la pena recogen las mismas convenciones. Esa es una de las mejores cosas del ecosistema de Java, que creo que ha sido una parte importante de su éxito.

Tom Hawtin - tackline
fuente
82
Es difícil aceptar que "clazz" sea más claro que "_class" o "myClass". Si hubiera visto "_class" en el código, la intención habría sido más obvia que una no palabra que me envió a Google (y a esta página).
uscjeremy
@uscjeremy: Personalmente, prefiero el uso de guiones bajos a tener identificadores que difieren solo en mayúsculas y minúsculas. Si estuviera diseñando un lenguaje, me gustaría que fuera un híbrido de reglas que distinguen entre mayúsculas y minúsculas: cualquier identificador solo podría usarse exactamente en la carcasa original, pero la declaración de cualquier identificador ocultaría cualquier identificador preexistente que difería solo en la carcasa. La Foodefinición en el alcance de la clase y fooen el alcance de la variable local debe ser legal, pero todas las referencias a la variable del alcance de la clase dentro del alcance del local deben requerir this.Foo. Tal regla sería ...
supercat
@uscjeremy: ... en mi opinión, combina las ventajas de los lenguajes que distinguen entre mayúsculas y minúsculas. Los idiomas que no distinguen entre mayúsculas y minúsculas tienen la ventaja de que las lecturas fonéticas de un nombre de identificador "foo" no serán ambiguas sin tener que decir "mayúscula foo" o "minúscula foo", pero no hay ninguna razón real para permitir que se deletree un identificador someThingen algunos lugares y sOmEtHiNgen otros.
supercat
1
@supercat La categoría general de puntuación Unicode es lo que estaba buscando. unicode.org/faq/punctuation_symbols.html / No diseñaría C #. En Java, se sale con un método llamado fnordy un campo llamado fnordsin ningún problema, mayúsculas o palabras sin sentido. Creo que eso será suficiente como contraejemplo.
Tom Hawtin - tackline
3
@uscjeremy Es difícil estar de acuerdo en que "clazz" es más claro que "_class" o "myClass" - True. Sin embargo, usar "_class" no sería una opción, porque claramente entra en conflicto con las convenciones de nomenclatura de Java .
MC Emperor
73

Porque no pueden usar la palabra que quieren usar, que es class. Es reservado

Presidente James K. Polk
fuente
2
Sí, lo sé, pero creo que deletrear una variable correcta sería más significativo.
Sawyer
22
@ Tony: ¿cómo puedes decir "sabes" y exigir que el nombre de la variable se escriba correctamente en el mismo comentario? Son mutuamente excluyentes.
duffymo
3
@ Tony, simplemente no puedes nombrar una variable "clase", es una palabra reservada.
Steve Kuo
66
@duffymo: Es divertido. Sé que la clase es una palabra reservada, y de hecho exijo que el nombre de la variable se deletree correctamente, ¿por qué son mutuamente excluyentes? ¿tienes que llamarlo 'clase'?
Sawyer
13
Supongo que Tony quiere que la variable sea nombrada algo más descriptivo que solo "clase". Por ejemplo, se podría decir que "x" se deletrea correctamente, pero no significa tanto como "numberOfComments"
Peter Recore
17

Es simplemente porque 'clase' es una palabra clave reservada, por Class classlo tanto, no está permitida. Por lo tanto, verá Class clazzo Class cls.

sfussenegger
fuente
77
No puedo pensar en una razón para nombrar una clase Classya que hay tantas clases en un proyecto dado que llamar a una clase THE class parece algo inútil. Tampoco se me ocurre una razón para llamar a una VARIABLE class...
Blindy
8
No nombró una clase Clase, es API de Java.
Sawyer
3
@Blindy: ¿Qué pasa con java.lang.Class? No tienes muchas opciones allí.
Dan Dyer
14
@Blindy: Ya existe una clase llamada Clase, que se refiere, bueno, a la clase de un objeto. La razón perfecta para tener una variable llamada 'clase' es cuando estás trabajando con la clase de un objeto (es decir: averiguar de qué tipo es un objeto)
Reverendo Gonzo
3
Consideraría informativo ClassInformation, ClassMetadatao algo similar. Cada clase es una clase, pero no los nombra a todos Class, los nombra por su función principal.
Blindy
7

Se trata del compilador real y su capacidad para distinguir lo que significa un token dentro de su contexto. Sin embargo, en este caso particular, es la incapacidad del compilador para distinguir lo que classsignifica el token en un contexto diferente. Es una regla dura y rápida que class, independientemente de su contexto, se utiliza para denotar la declaración de una clase y, como tal, es una palabra reservada . Eso es tan simple y de bajo nivel como se pone.

Si se siente obligado, podría escribir su propio compilador de Java para incluir una regla contextual que le permita usar classcomo nombre de variable. Aunque creo que sería mucho mejor usar su tiempo para usarlo clazzo klass, probablemente, también sería bueno para su salud.

Juan
fuente
3
Una palabra sobre la incapacidad : Java fue diseñado como un lenguaje de palabras reservadas . Los lenguajes de palabras no reservadas pueden compilar con éxito y resaltar sintaxis, como if if then then else else , a pesar de la (in) legibilidad. Por lo tanto, el compilador se dejó incapaz a
usr-local-ΕΨΗΕΛΩΝ
4

¿De dónde se origina esto?

Lo vi primero en los rompecabezas de Josh Bloch. Pero estoy bastante seguro de que otros desarrolladores lo usaron mucho antes. Josh Bloch lo hizo más famoso.

romano
fuente
4

Java no tiene una función que le permita usar una palabra clave como identificador, a diferencia de C # con su @prefijo (por ejemplo, @classes un identificador válido).

finnw
fuente
2
Ese es un identificador diferente. classy $classson identificadores válidos (pero diferentes) en la JVM. No hay un identificador que pueda escribir en un archivo fuente Java que se traduzca "class"en la VM.
finnw
2

Es solo una palabra en inglés reemplazada (Equavalent) por Keyword Class Keyword, para que la gente entienda que es una Clase. y es casi para aumentar la legibilidad del Código

Nada de gran lógica involucrada en esto

gmhk
fuente
2

La declaración Class clazzes popular en el mundo de Java, pero puede ser incómodo para los recién llegados y los correctores ortográficos. He escuchado a algunas personas decir que debe evitarse de acuerdo con el principio de mínimo asombro .

Como es posible decir que un Classobjeto representa un tipo , personalmente prefiero declarar variables como Class type.

Michal Kordas
fuente
0

Usamos clazz porque class es un tipo de encabezado. Por ejemplo, usa clase aquí:

public class HelloWorld {

y aquí:

Object.class.getName();

Desafortunadamente, tenemos que usar nombres alternativos como clazz.

Romejanic
fuente
-2

En pocas palabras, classtiene una clase que clazzno.

usuario1843640
fuente