Giava
Periodo. Punto. Fine della storia.
Dove iniziare? Oh, so da dove cominciare: i generici follemente complicati, brutti, stupidi e intrinsecamente rotti . Devo aggiungere altro? :( Va bene, quindi: digita cancellazione .
Quindi c'è una gestione delle risorse non deterministica. Kewl feetcher!
Qual è il prossimo passo? Oh sì: le stupide regex di Java sono la mia carne più irritante e ribollente. Non riesco a contare quante volte sono stato colpito dal fatto che non ho abbastanza barre rovesciate. Questo è anche peggio che non avere accesso a nessuna proprietà Unicode di questo millennio - che è un toro completo. Dieci anni da baraccone fuori moda !!!Completamente inutile. Trash it.
Quindi c'è il bug che le scorciatoie della classe di caratteri non funzionano su non ASCII. Che dolore reale! E non considerare nemmeno l'utilizzo\p{javaWhiteSpace}
; non fa la cosa giusta con diversi punti di codice di spazi bianchi Unicode molto comuni.
Sapevi che c'è una \p{javaJavaIdentifierStart}
proprietà? Che cosa stavano pensando? Sono così contento di aver fatto sbirciare così furbi su questo disco.
Hai mai provato a usare il flag CANON_EQ? Lo sai che lo fa davvero e cosa non fa? Che ne dici del cosiddetto "caso Unicode"? Un sacco di cose normali del case non funzionano affatto.
Quindi rendono difficile scrivere regex mantenibili. Java non ha ancora capito come scrivere stringhe multilinea, quindi finisci per scrivere cose folli come questa:
"(?= ^ [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"
Cosa sono tutte quelle nuove linee? Oh, solo stupidità di Java. Hanno usato commenti Perl, non commenti Java ( idioti! ) Che vanno fino alla fine della riga. Quindi se non li metti\n
lì, taglia il resto del tuo schema. Duh e double duh!
Non usare regex in Java: finirai per voler distruggere le cose, è tutto così doloroso e rotto. Non posso credere che la gente lo sopporti. Alcuni no .
Quindi possiamo iniziare a parlare dell'assurdità idiota di Java con le codifiche. Innanzitutto, c'è il fatto che la codifica della piattaforma predefinita è sempre una codifica a 8 bit scadente anche se i charchar di Java sono Unicode. Quindi c'è come non generano un'eccezione su un errore di codifica. Ti garantirai una merda. O che ne dici di questo:
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.
Qual è la differenza? Lo sapevi solo uno di questi genererà un'eccezione se si verifica un errore di codifica? Il resto li mette solo a museruola.
Poi c'è l'idiozia dei caratteri Java che non sono sufficienti per contenere un personaggio! A che diavolo stanno pensando? Ecco perché li chiamo charchars. Devi scrivere codice in questo modo se ti aspetti che funzioni correttamente:
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("."); }
}
}
E chi mai pensa di farlo? Accanto a nessuno.
In quanti personaggi ci sono "\uD83D\uDCA9"
? Uno o due? Dipende da come li conti. Il motore regex si occupa ovviamente dei caratteri logici, quindi un modello ^.$
avrà successo e un modello ^..$
fallirà. Questa follia è dimostrata qui:
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.
Quell'idiota è tutto perché non puoi scrivere il perfettamente ragionevole \u1F4A9
, e naturalmente non ricevi alcun avviso sul fatto che non puoi farlo. Fa solo la cosa sbagliata.
Stoooopid.
Mentre ci siamo, l'intera \uXXXX
notazione è congenitamente cerebrale. Il preprocessore Java ( sì, mi hai sentito ) ci arriva prima che lo faccia Java, quindi ti è proibito scrivere cose perfettamente ragionevoli come "\u0022"
, perché quando Java lo vede, il suo preprocessore lo ha trasformato """
, quindi perdi. Oh aspetta, non se è in una regex! Quindi puoi usare"\\u0022"
bene.
Riiiiiiiight!
Sapevi che in Java non c'è modo di farlo isatty(0)
chiamata? Non ti è nemmeno permesso di pensare tali pensieri. Non ti farebbe bene.
E poi c'è l'intero abominio del sentiero di classe.
O il fatto che non c'è modo di specificare la codifica del file sorgente Java nello stesso file sorgente in modo da non perderlo? Ancora una volta chiedo di sapere: COSA PENSANO L'INFERNO?
Ferma la follia! Non riesco a credere che la gente sopporti questa spazzatura. È uno scherzo completo. Preferirei essere un salutista Walmart piuttosto che subire le imbragature e le frecce della folle follia di Java. È tutto rotto e non solo non possono ripararlo, non lo ripareranno.
Questo dalle stesse persone volgari che si vantavano di un linguaggio che rendeva illegale avere una printf()
funzione. Accidenti, quello certo ha funzionato davvero bene, non è vero però !?
Teschi di numeri. Gli schiaffi sono troppo gentili per loro. Se volessi programmare in assembler, lo farei. Questo non è un linguaggio salvabile. L'imperatore è nudo.
Lo odiamo. Lo odiamo per sempre . Lascialo morire muori muori !