2010-03-27 10 views
111

He visto muchos códigos con una declaración como Class clazz, ¿de dónde proviene esto? ¿Es esto algún tipo de convención? Creo que 'clazz' no es ni siquiera una palabra en inglés, no tiene ningún significado en absoluto, ¿cómo pueden tantos programadores nombrar un nombre incorrecto casualmente?¿Por qué a los programadores Java les gusta nombrar una variable "clazz"?

+26

no se olvide klass! –

+13

@Peter: buen punto, eso es un clasico. –

+5

... y qué pasa con 'Class class1' o' Class myClass'? –

Respuesta

127

clazz se ha utilizado en Java en lugar de la palabra reservada "clase" desde JDK 1.0. "clase" es lo que quieres, pero abreviar o insertar basura ("a", "the", "_", etc.) reduce la claridad. clazz solo dice clase. Los hablantes de inglés "internacionales" (quienes leen inglés 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 valioso código Java y los tutoriales recogen las mismas convenciones. Esa es una de las mejores cosas sobre el ecosistema de Java, que creo que ha sido una parte importante de su éxito.

+47

Es difícil aceptar que "clazz" es 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 palabra no verbal que me envió a Google (y a esta página). – uscjeremy

+0

@uscjeremy: Personalmente, prefiero el uso de guiones bajos a tener identificadores que difieren solo en el caso. Si estuviera diseñando un lenguaje, lo haría ser un híbrido de reglas sensibles a 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 preexistente. identificadores que difieren solo en la carcasa. Tener 'Foo' definido en el alcance de clase y' foo' en el ámbito de variable local debería ser legal, pero todas las referencias a la variable de ámbito de clase dentro del alcance del local deberían requerir 'this.Foo'. Tal regla sería ... – supercat

+0

@uscjeremy: ... en mi opinión, combine las ventajas de los idiomas sensibles a mayúsculas y minúsculas. Los lenguajes insensibles a las mayúsculas y minúsculas tienen la ventaja de que las lecturas fonéticas de un nombre identificador "foo" serán inequívocas sin tener que decir "foo mayúscula" o "foo minúscula", pero no hay ninguna razón real para permitir que un identificador se deletree 'someThing' en algunos lugares y 'sOmEtHiNg' en otros. – supercat

61

Porque no pueden usar la palabra que quieren usar que es 'clase'. Esta reservado.

+1

Sí, lo sé, pero creo que deletrear un derecho variable sería más significativo. – Sawyer

+15

@Tony: ¿cómo puedes decir "ya sabes" y exigir que el nombre de la variable se deletree en el mismo comentario? Ellos son mutuamente exclusivos. – duffymo

+3

@Tony, simplemente no puede nombrar una variable "clase", es una palabra reservada. –

12

Es simplemente porque 'clase' es una palabra clave reservada, por lo tanto Class class no está permitido. Por lo tanto, verá Class clazz o Class cls.

+6

No puedo pensar en una razón para nombrar una clase 'Class' ya que hay tantas clases en cualquier proyecto que llamar a una clase LA clase parece un poco sin sentido. Tampoco puedo pensar en una razón para llamar a una 'clase' VARIABLE ... – Blindy

+6

No has nombrado una clase Clase, es una API java. – Sawyer

+2

@Blindy: ¿Qué pasa con java.lang.Class? No tienes mucha opción allí. –

1

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

Nada grande lógica utilizada en este

4

de dónde viene esta originan a partir de?

La vi por primera vez en los rompecabezas de Josh Bloch. Pero estoy bastante seguro de que fue usado mucho antes por otros desarrolladores. Josh Bloch acaba de hacerlo más famoso.

4

Java no tiene una característica que le permite utilizar una palabra clave como un identificador, a diferencia de C# con su @ prefijo (por ejemplo @class es un identificador válido.)

+2

¿qué hay de $ class en java? – irreputable

+1

Ese es un identificador diferente. 'class' y' $ class' son ambos identificadores válidos (pero diferentes) en la JVM. No hay ningún identificador que pueda escribir en un archivo fuente Java que se traduce como '" clase "' en la máquina virtual. – finnw

+0

otra razón por la que C# es 10^10 veces mejor que java – morpheus

7

Todo se reduce a que el compilador real y su capacidad para distinguir qué significa un token dentro de su contexto. Sin embargo, en este caso particular, es la incapacidad del compilador para distinguir lo que significa el token class en un contexto diferente. Es una regla difícil y rápida que class, independientemente de su contexto, se utiliza para denotar la declaración de una clase, y como tal es palabra reservada. Eso es tan simple y tan bajo como sea posible.

Si se siente obligado, puede escribir su propio compilador de Java para incluir una regla contextual que le permita usar class como nombre de variable. Aunque creo que sería mucho mejor utilizar tu tiempo para simplemente usar clazz o klass, probablemente sea bueno para tu salud también.

+2

Una palabra sobre * inhabilidad *: Java ** fue diseñado ** como un lenguaje * de palabras reservadas. Los lenguajes de palabras no reservadas pueden compilar y resaltar declaraciones de sintaxis con éxito, como * if if then else else *, a pesar de (un) legibilidad. Entonces, el compilador fue deliberadamente dejado * incapaz * –

0

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

public class HelloWorld { 

y aquí:

Object.class.getName(); 

Así que, lamentablemente, tenemos que usar nombres alternativos tales como clazz.

1

La declaración Class clazz es popular en el mundo de Java, pero puede ser incómodo para los recién llegados y los correctores ortográficos. Algunas personas podrían decir que debe evitarse de acuerdo con principle of least astonishment.

Como podemos decir que un objeto Classrepresents a type, personalmente prefiero declarar tales variables como Class type.

Cuestiones relacionadas