Java
Zeitraum. Punkt. Ende der Geschichte.
Wo soll man anfangen? Oh, ich weiß, wo ich anfangen soll: Java ist wahnsinnig kompliziert und hässlich und dumm und von Natur aus kaputte Generika. Muss ich mehr sagen? :( Okay, dann: Schreibe Erasure .
Dann gibt es nicht deterministisches Ressourcenmanagement. Kewl Fußschütze!
Was kommt als nächstes? Oh ja: Javas blöde Regexes sind mein irritierendstes, brodelndes Rindfleisch. Ich kann nicht zählen, wie oft ich abgespritzt wurde, weil ich nicht genug Backslashes hatte. Dies ist noch schlimmer, als keinen Zugriff auf Unicode-Eigenschaften aus diesem Jahrtausend zu haben - was ein absoluter Reinfall ist. Zehn verdammte Jahre veraltet !!! Völlig nutzlos. Mach es kaputt.
Dann gibt es den Fehler, dass die Zeichenklassenverknüpfungen nicht mit Nicht-ASCII funktionieren. Was für ein königlicher Schmerz! Und erwägen Sie nicht einmal die Verwendung \p{javaWhiteSpace}
; Mit einigen sehr verbreiteten Unicode-Whitespace-Codepunkten ist das nicht richtig.
Wussten Sie, dass es eine \p{javaJavaIdentifierStart}
Immobilie gibt? Was haben sie gedacht? Ich bin so froh, dass sie so kluge Spanner haben.
Haben Sie jemals versucht, das CANON_EQ-Flag zu verwenden? Wissen Sie, dass das wirklich funktioniert und was nicht ? Wie wäre es mit einem sogenannten "Unicode-Fall"? Eine Menge normaler Gehäuse-Dinge funktionieren überhaupt nicht.
Dann machen sie es schwierig, wartbare reguläre Ausdrücke zu schreiben. Java hat immer noch nicht herausgefunden, wie man mehrzeilige Strings schreibt, also schreibt man am Ende wahnsinnige Dinge wie diese:
"(?= ^ [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"
Was sind all diese Zeilenumbrüche? Oh, nur Java-Dummheit. Sie verwendeten Perl-Kommentare, keine Java-Kommentare ( Idioten! ), Die bis zum Ende der Zeile reichen. Wenn Sie diese also nicht \n
dort ablegen, hacken Sie den Rest Ihres Musters ab. Duh und doppelt duh!
Verwenden Sie keine regulären Ausdrücke in Java: Sie werden am Ende einfach Dinge zerschlagen wollen, es ist alles so schmerzhaft und kaputt. Ich kann nicht glauben, dass sich die Leute damit abfinden. Manche nicht .
Dann können wir anfangen, über Javas idiotischen Unsinn mit Codierungen zu sprechen. Erstens gibt es die Tatsache, dass die Standard-Plattformkodierung immer eine lahme 8-Bit-Kodierung ist, obwohl Javas Zeichen Unicode sind. Dann gibt es eine Möglichkeit, wie sie bei einem Codierungsfehler keine Ausnahme auslösen. Sie werden garantiert Mist bekommen. Oder wie wäre es damit:
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.
Was ist der Unterschied? Wussten Sie, dass nur eine davon eine Ausnahme auslöst, wenn Sie einen Codierungsfehler haben? Der Rest macht sie nur mundtot.
Dann gibt es die Idiotie der Java-Zeichen, die nicht ausreichen, um einen Charakter zu halten! Was zur Hölle denken sie? Deshalb nenne ich sie charchars. Sie müssen Code wie diesen schreiben, wenn Sie erwarten, dass er richtig funktioniert:
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("."); }
}
}
Und wer denkt jemals daran, das zu tun? Nahe bei niemandem.
Wie viele Charaktere gibt es in "\uD83D\uDCA9"
? Eins oder zwei? Kommt darauf an, wie man sie zählt. Die Regex-Engine verarbeitet natürlich logische Zeichen, sodass ein Muster ^.$
erfolgreich ist und ein Muster ^..$
fehlschlägt. Dieser Wahnsinn wird hier demonstriert:
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.
Dieser Schwachsinn ist alles, weil man das absolut Vernünftige nicht schreiben kann \u1F4A9
, und natürlich bekommt man auch keine Warnung, dass man das nicht kann. Es macht einfach das Falsche.
Dummkopf.
Während wir gerade dabei sind, ist die gesamte \uXXXX
Notation angeboren hirntot. Der Java-Präprozessor ( ja, Sie haben es gehört ) hat es vor Java verstanden, und es ist Ihnen untersagt, absolut vernünftige Dinge zu schreiben "\u0022"
, zum Beispiel, wenn Java dies sieht, hat sein Präprozessor es in verwandelt """
, und Sie verlieren. Oh warte, nicht wenn es in einer Regex ist! Sie können also "\\u0022"
ganz gut verwenden.
Riiiiiiiight!
Wussten Sie, dass es in Java keine Möglichkeit gibt, einen isatty(0)
Anruf zu tätigen? Sie dürfen nicht einmal solche Gedanken denken. Es wäre nicht gut für dich.
Und dann gibt es den ganzen Klassenweg Greuel.
Oder die Tatsache, dass es keine Möglichkeit gibt, die Codierung Ihrer Java-Quelldatei in derselben Quelldatei anzugeben, damit Sie sie nicht verlieren? Noch einmal verlange ich zu wissen: WAS HÖLLE HATTE IHR DENKEN?
Stoppen Sie den Wahnsinn! Ich kann nicht glauben, dass die Leute sich diesen Müll gefallen lassen. Es ist ein kompletter Witz. Ich wäre lieber ein Walmart-Begrüßer, als die Schleudern und Pfeile des unverschämten Java-Wahnsinns zu ertragen. Es ist alles kaputt und sie können es nicht nur nicht reparieren, sie werden es auch nicht reparieren.
Dies von den gleichen schelmischen Leuten, die sich auf eine Sprache rühmten, die es illegal machte, eine printf()
Funktion zu haben . Gee, dass Sie sicher , wirklich gut geklappt, nicht wahr , obwohl !?
Bloße Totenköpfe. Schlampen ist ihnen zu nett. Wenn ich in Assembler programmieren wollte, würde ich. Dies ist keine heilsame Sprache. Der Kaiser hat keine Kleider.
Wir hassen es. Wir hassen es für immer . Lass es sterben sterben sterben !