Java
Período. Punto final. Fin de la historia.
¿Donde empezar? Oh, sé por dónde empezar: los genéricos increíblemente complicados, feos, estúpidos e inherentemente rotos de Java . ¿Necesito decir mas? :( bien Ok, entonces: Tipo de borrado .
Luego está la gestión de recursos no determinista. Kewl Piescher!
¿Qué sigue? Ah, sí: las expresiones estúpidas de Java son mi carne más irritante y bulliciosa. No puedo contar cuántas veces he sido manguera por no tener suficientes barras invertidas. Esto es incluso peor que no tener acceso a ninguna propiedad Unicode de este milenio, que es un toro completo. ¡¡¡Diez malditos años desactualizados !!! Completamente inutil. Basura que.
Luego está el error de que los atajos de clase de caracteres no funcionan en no ASCII. ¡Qué dolor real! Y ni siquiera consideres usar \p{javaWhiteSpace}
; no hace lo correcto con varios puntos de código de espacio en blanco Unicode muy comunes.
¿Sabías que hay una \p{javaJavaIdentifierStart}
propiedad? ¿En qué estado estaban pensando? Estoy tan contento de que hayan conseguido espías tan inteligentes trabajando duro.
¿Alguna vez intentó usar la bandera CANON_EQ? ¿Sabes que realmente lo hace, y lo que no? hace? ¿Qué tal el llamado "caso Unicode"? Un montón de cosas normales de la carcasa simplemente no funcionan en absoluto.
Luego hacen que sea difícil escribir expresiones regulares mantenibles. Java todavía no ha descubierto cómo escribir cadenas multilínea, por lo que terminas escribiendo cosas como esta:
"(?= ^ [A-Z] [A-Za-z0-9\\-] + $) \n"
+ "(?! ^ .* \n"
+ " (?: ^ \\d+ $ \n"
+ " | ^ [A-Z] - [A-Z] $ \n"
+ " | Invitrogen \n"
+ " | Clontech \n"
+ " | L-L-X-X \n"
+ " | Sarstedt \n"
+ " | Roche \n"
+ " | Beckman \n"
+ " | Bayer \n"
+ " ) # end alternatives \n"
+ ") # end negated lookahead \n"
¿Cuáles son todas esas líneas nuevas? Oh, solo estupidez de Java. Usaron comentarios de Perl, no comentarios de Java ( ¡idiotas! ) Que van hasta el final de la línea. Así que si no pones esos\n
, cortarás el resto de tu patrón. ¡Duh y doble duh!
No uses expresiones regulares en Java: terminarás queriendo destrozar cosas, todo es tan doloroso y roto. No puedo creer que la gente aguante esto. Algunos no lo hacen .
Entonces podemos comenzar a hablar sobre las tonterías idiotas de Java con codificaciones. Primero, está el hecho de que la codificación de plataforma predeterminada siempre es una codificación poco convincente de 8 bits a pesar de que los caracteres de Java son Unicode. Luego está cómo no generan una excepción en un error de codificación. Te garantizamos que conseguirás basura. O qué tal esto:
OutputStreamWriter(OutputStream out)
Creates an OutputStreamWriter that uses the default character encoding.
OutputStreamWriter(OutputStream out, Charset cs)
Creates an OutputStreamWriter that uses the given charset.
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
Creates an OutputStreamWriter that uses the given charset encoder.
OutputStreamWriter(OutputStream out, String charsetName)
Creates an OutputStreamWriter that uses the named charset.
¿Cual es la diferencia? ¿Sabías que solo uno de ellos generará una excepción si tiene un error de codificación? El resto solo les hace bozal.
¡Luego está la idiotez de que los caracteres Java no son suficientes para contener un personaje! ¿Qué demonios están pensando? Por eso los llamo charchars. Debe escribir un código como este si espera que funcione correctamente:
private static void say_physical(String s) {
System.out.print("U+");
for (int i = 0; i < s.length(); i++) {
System.out.printf("%X", s.codePointAt(i));
if (s.codePointAt(i) > Character.MAX_VALUE) { i++; } // UG!
if (i+1 < s.length()) { System.out.printf("."); }
}
}
¿Y quién piensa hacer eso? Al lado de nadie.
¿En cuántos personajes hay "\uD83D\uDCA9"
? ¿Uno o dos? Depende de cómo los cuentes. El motor de expresiones regulares, por supuesto, trata con caracteres lógicos, por lo que un patrón ^.$
tendrá éxito y un patrón ^..$
fallará. Esta locura se demuestra aquí:
String { U+61, "\u0061", "a" } =~ /^.$/ => matched.
String { U+61, "\u0061", "a" } =~ /^..$/ => failed.
String { U+61.61, "\u0061\u0061", "aa" } =~ /^.$/ => failed.
String { U+61.61, "\u0061\u0061", "aa" } =~ /^..$/ => matched.
String { U+DF, "\u00DF", "ß" } =~ /^.$/ => matched.
String { U+DF, "\u00DF", "ß" } =~ /^..$/ => failed.
String { U+DF.DF, "\u00DF\u00DF", "ßß" } =~ /^.$/ => failed.
String { U+DF.DF, "\u00DF\u00DF", "ßß" } =~ /^..$/ => matched.
String { U+3C3, "\u03C3", "σ" } =~ /^.$/ => matched.
String { U+3C3, "\u03C3", "σ" } =~ /^..$/ => failed.
String { U+3C3.3C3, "\u03C3\u03C3", "σσ" } =~ /^.$/ => failed.
String { U+3C3.3C3, "\u03C3\u03C3", "σσ" } =~ /^..$/ => matched.
String { U+1F4A9, "\uD83D\uDCA9", "💩" } =~ /^.$/ => matched.
String { U+1F4A9, "\uD83D\uDCA9", "💩" } =~ /^..$/ => failed.
String { U+1F4A9.1F4A9, "\uD83D\uDCA9\uD83D\uDCA9", "💩💩" } =~ /^.$/ => failed.
String { U+1F4A9.1F4A9, "\uD83D\uDCA9\uD83D\uDCA9", "💩💩" } =~ /^..$/ => matched.
Esa idiotez es todo porque no puedes escribir lo perfectamente razonable \u1F4A9
, ni por supuesto recibes ninguna advertencia de que no puedes hacerlo. Simplemente hace lo incorrecto.
Stoooopid.
Mientras estamos en eso, toda la \uXXXX
notación es congénitamente muerte cerebral. El preprocesador de Java ( sí, me escuchaste ) lo hace antes de que lo haga Java, por lo que tienes prohibido escribir cosas perfectamente razonables como "\u0022"
, porque cuando Java lo ve, su preprocesador lo ha convertido """
, por lo que pierdes. ¡Oh, espera, no si está en una expresión regular! Entonces puedes usarlo "\\u0022"
bien.
Riiiiiiiight!
¿Sabías que no hay forma en Java para hacer una isatty(0)
llamada? Ni siquiera se te permite pensar tales pensamientos. No sería bueno para ti.
Y luego está toda la abominación classpath.
¿O el hecho de que no hay forma de especificar la codificación de su archivo fuente Java en ese mismo archivo fuente para que no lo pierda? Una vez más, exijo saber: ¿QUÉ DEMONIOS PENSARON?
¡Para la locura! No puedo creer que la gente aguante esta basura. Es una broma completa. Prefiero ser un saludador de Walmart que sufrir las hondas y flechas de la indignante locura de Java. Todo está roto, y no solo no pueden arreglarlo, sino que no lo arreglarán.
Esto por las mismas personas astutas que se enorgullecían de un idioma que hacía ilegal tener una printf()
función. Caramba, eso funcionó muy bien, ¿no?
Puros numbskulls. Abofetear es demasiado amable para ellos. Si quisiera programar en ensamblador, lo haría. Este no es un lenguaje rescatable. El emperador no tiene ropa.
Lo odiamos Lo odiamos por siempre . ¡Déjalo morir, morir, morir !