Esta pregunta se está discutiendo en meta . Tomemos argumentos a favor o en contra de cerrarlo / eliminarlo allí.
Adam Lear
63
@anotherordinary Probablemente deberías deshacerte de tu amigo como profesor de programación si piensa que decirte que averigües esto sería una buena manera de aprender este lenguaje. Recordar trivialidades irreverentes no es útil en absoluto. Mucho menos cuando estás empezando a aprender un idioma.
Enno Shioji
2
@EnnoShioji Gran punto. "Irrelevante". Lo siento.
Asad Saeeduddin
1
¿Alguien está intentando crear el "IOJCC"? (google "IOCCC")
Olivier Dulac
1
@EnnoShioji ¿Cómo es esta "trivia irrelevante" que hay que recordar? Cualquiera que se llame a sí mismo un programador de Java debería poder entender esto fácilmente.
phant0m
Respuestas:
154
_es el nombre de la clase. Es muy confuso, ¡pero funciona!
Hay pocos errores en tu get crazyejemplo. (1) olvidó agregar punto y coma después ____=__(dos veces), (2) si está tratando de sobrecargar el _método, entonces también debe pasar el tipo, por lo que _(___)debería ser _(_ ___). Así es como puede verse class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__ = ___;}}. Espera un minuto. ¿Acabo de depurar guiones bajos? Es hora de frenar.
Pshemo
@Pshemo Lol, nunca quise tomar en serio ese código: P arreglado
tckmn
Obtén un +1 por el comentario de mi respuesta. No se me ocurrió otra forma de recompensarte.
Ed Heal
71
_ es el nombre de la clase, el subrayado es un nombre de variable Java válido, solo necesita sangrar su código para desofuscarlo:
class_{
_ _;
_(){
_=this;
}
}
Me gusta:
classA{
A A;
A(){
A=this;
}
}
Editar: gracias a @Daniel Fischer
Los nombres de tipos y los nombres de variables tienen espacios de nombres diferentes. y por ejemplo, el código class FOO { FOO FOO; }es válido en Java.
Resumen
_ es un nombre de clase, por ejemplo, en class _{
_es un nombre de miembro de la clase, por ejemplo, en _ _;y_=this
_ es un nombre de constructor, por ejemplo, en _()
nombres de variables locales (incluidos los parámetros) y
etiquetas.
Además, cada enumeración declarada tiene su propio espacio de nombres. Los nombres idénticos de diferentes tipos no entran en conflicto; por ejemplo, un método puede tener el mismo nombre que una variable local .
No hay error. Se compila muy bien mientras escribía. Simplemente no lo entendí hasta ahora.
otro ordinario
2
Los nombres de tipo de @GrijeshChauhan y los nombres de variable tienen espacios de nombres diferentes. class FOO { FOO FOO; }trabajos.
Daniel Fischer
1
En Haskell, por ejemplo, los tipos y valores también tienen diferentes espacios de nombres. Una diferencia es que el caso tiene significado, un nombre de tipo debe comenzar con una letra mayúscula, por lo que no puede nombrar ningún valor antiguo como un tipo, sino solo constructores, pero data Foo = Foo | Bar Intfunciona. Solo puede funcionar, por supuesto, en idiomas en los que puede averiguar la categoría de un identificador desde donde aparece.
Daniel Fischer
2
@anotherordinary leer mi respuesta actualizada También agregué un enlace
Grijesh Chauhan
2
@GrijeshChauhan Lo veo. Gracias :)
otro ordinario
12
bueno, ese es un buen ejemplo. Java permite que unicode sean identificadores para que pueda escribir algo como:
class ⲥlass{
ⲥlass claѕѕ;
}
aquí la c del nombre de la clase es 'ⲥ' (U + 2CA5 COPTIC MINÚSCULA SIMA) y
'ѕ' del nombre del objeto (U + 0455 LETRA CIRILICA MINÚSCULA DZE).
No puede tener una variable nombrada class, es una palabra clave.
nickb
14
@nickb: no es una palabra clave de Java 'class'. como he mencionado, el nombre del objeto 'claѕѕ'tiene caracteres 'ss'que no son ascii. así que en realidad el nombre del objeto claѕѕes cla\u0455\u0455'Creo que esto aclara el malentendido. :)
Respuestas:
_
es el nombre de la clase. Es muy confuso, ¡pero funciona!Con la clase renombrada:
class Something {Something something;Something(){something=this;}}
Y limpiado:
class Something { Something something; Something() { something=this; } }
Y puedes volverte loco con este extraño nombre
:)
class _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__=___;}}
De hecho, incluso se admite Unicode, por lo que esto es válido:
class 合法類別名稱{合法類別名稱(){}}
fuente
get crazy
ejemplo. (1) olvidó agregar punto y coma después____=__
(dos veces), (2) si está tratando de sobrecargar el_
método, entonces también debe pasar el tipo, por lo que_(___)
debería ser_(_ ___)
. Así es como puede verseclass _{_ __;_ ____;_(){__=this;____=__;}_(_ ___){__ = ___;}}
. Espera un minuto. ¿Acabo de depurar guiones bajos? Es hora de frenar._
es el nombre de la clase, el subrayado es un nombre de variable Java válido, solo necesita sangrar su código para desofuscarlo:class _{ _ _; _(){ _=this; } }
Me gusta:
class A{ A A; A(){ A=this; } }
Editar: gracias a @Daniel Fischer
Resumen
_
es un nombre de clase, por ejemplo, enclass _{
_
es un nombre de miembro de la clase, por ejemplo, en_ _;
y_=this
_
es un nombre de constructor, por ejemplo, en_()
Recuerde: Java utiliza seis espacios de nombres diferentes:
fuente
class FOO { FOO FOO; }
trabajos.data Foo = Foo | Bar Int
funciona. Solo puede funcionar, por supuesto, en idiomas en los que puede averiguar la categoría de un identificador desde donde aparece.bueno, ese es un buen ejemplo. Java permite que unicode sean identificadores para que pueda escribir algo como:
class ⲥlass { ⲥlass claѕѕ; }
aquí la c del nombre de la clase es 'ⲥ' (U + 2CA5 COPTIC MINÚSCULA SIMA) y
'ѕ' del nombre del objeto (U + 0455 LETRA CIRILICA MINÚSCULA DZE).
fuente
class
, es una palabra clave.'class'
. como he mencionado, el nombre del objeto'claѕѕ'
tiene caracteres'ss'
que no son ascii. así que en realidad el nombre del objetoclaѕѕ
escla\u0455\u0455'
Creo que esto aclara el malentendido. :)