Jawa
Kropka. Kropka. Koniec opowieści.
Gdzie zacząć? Och, wiem od czego zacząć: niesamowicie skomplikowana i brzydka, głupia i z natury zepsuta Java . Czy muszę powiedzieć więcej? :( Ok dobrze, a następnie: wpisz kasowanie .
Potem jest niedeterministyczne zarządzanie zasobami. Kewl footcher!
Co dalej? O tak: Głupie wyrażenia Javy to moja najbardziej irytująca, kipiąca wołowina. Nie mogę zliczyć, ile razy mnie nie było, ponieważ nie miałem wystarczającej liczby ukośników. Jest to nawet gorsze niż brak dostępu do jakichkolwiek właściwości Unicode z tego tysiąclecia - co jest całkowitym bykiem. Dziesięć cholernych lat nieaktualnych !!! Kompletnie bezużyteczny. Wyrzuć to.
Następnie jest błąd polegający na tym, że skróty klas postaci nie działają na nie-ASCII. Co za królewski ból! I nawet nie rozważaj używania \p{javaWhiteSpace}
; nie robi to dobrze z kilkoma bardzo powszechnymi punktami kodowymi spacjami w Unicode.
Czy wiesz, że jest \p{javaJavaIdentifierStart}
nieruchomość? Co oni sobie myślą? Tak się cieszę, że mają tak inteligentnych podglądaczy na twardo.
Czy kiedykolwiek próbowałeś użyć flagi CANON_EQ? Czy wiesz, że to naprawdę działa, a czego nie robi? Co powiesz na tak zwaną „przypadek Unicode”? Kilka normalnych obudów po prostu w ogóle nie działa.
Potem utrudniają pisanie możliwych do utrzymania wyrażeń regularnych. Java wciąż nie wymyślił, jak pisać ciągi wielowierszowe, więc w końcu piszesz takie szalone rzeczy:
"(?= ^ [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"
Co to są te wszystkie nowe linie? Och, tylko głupota Java. Używali komentarzy Perla, a nie komentarzy Javy ( idioci! ), Które przechodzą do końca linii. Więc jeśli nie umieścisz ich \n
tam, odetniesz resztę swojego wzoru. Duh i double duh!
Nie używaj wyrażeń regularnych w Javie: po prostu skończysz z chęcią zniszczenia rzeczy, wszystko jest tak bolesne i zepsute. Nie mogę uwierzyć, że ludzie to znoszą. Niektórzy nie .
Następnie możemy zacząć mówić o idiotycznych nonsensach Javy za pomocą kodowania. Po pierwsze, domyślnym kodowaniem platformy jest zawsze słabe 8-bitowe kodowanie, mimo że znaki Java są Unicode. Jest też sposób, w jaki nie zgłaszają wyjątku dotyczącego błędu kodowania. Gwarantujesz bzdury. A może to:
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.
Co za różnica? Czy wiesz, że tylko jeden z nich zgłosi wyjątek, jeśli wystąpi błąd kodowania? Reszta po prostu kaganiec.
Potem idiotyzm znaków Java nie wystarcza do utrzymania postaci! Co oni do diabła myślą? Dlatego nazywam je charcharami. Musisz napisać taki kod, jeśli spodziewasz się, że działa poprawnie:
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("."); }
}
}
A kto kiedykolwiek myśli, aby to zrobić? Obok nikogo.
Ile tam jest znaków "\uD83D\uDCA9"
? Jeden lub dwa? Zależy jak je policzysz. Silnik regex oczywiście zajmuje się znakami logicznymi, więc wzorzec ^.$
się powiedzie, a wzorzec ^..$
się nie powiedzie. Owo szaleństwo zostało pokazane tutaj:
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.
Ten idiotyzm polega na tym, że nie możesz napisać całkowicie rozsądnego \u1F4A9
, ani oczywiście nie otrzymujesz ostrzeżenia, że nie możesz tego zrobić. Po prostu robi to źle.
Głupiutki.
Skoro już o tym \uXXXX
mowa, cała notacja jest wrodzona martwa dla mózgu. Preprocesor Java ( tak, słyszałeś mnie ) dotrze do niego, zanim zrobi to Java, więc nie wolno ci pisać całkowicie rozsądnych rzeczy, takich jak "\u0022"
, ponieważ zanim Java to zobaczy, jego preprocesor zmienił go """
, więc przegrywasz. Och, czekaj, nie, jeśli to wyrażenie regularne! Możesz więc dobrze wykorzystać "\\u0022"
.
Riiiiiiiight!
Czy wiesz, że w Javie nie ma możliwości wykonania isatty(0)
połączenia? Nie wolno ci nawet myśleć takich myśli. To nie byłoby dla ciebie dobre.
A potem jest cała obrzydliwość klasy.
Lub fakt, że nie ma sposobu, aby określić kodowanie pliku źródłowego Java w tym samym pliku źródłowym, aby go nie zgubić? Po raz kolejny żądam wiedzieć: CO CHCĘ BYŁO MYŚLENIE‽‽‽
Powstrzymać szaleństwo! Nie mogę uwierzyć, że ludzie znoszą te śmieci. To kompletny żart. Wolałbym być powitaniem Walmarta niż cierpieć z powodu procy i strzały oburzającego szaleństwa na Jawie. Wszystko jest zepsute i nie tylko nie mogą tego naprawić, ale nie naprawią tego.
To przez tych samych winorośli, którzy szczycili się językiem, w którym printf()
funkcja była nielegalna . Ojej, to na pewno zadziałało naprawdę, prawda ?!
Zwykłe zdrętwiałe czaszki. Policzkowanie suk jest dla nich zbyt miłe. Gdybym chciał zaprogramować w asemblerze, zrobiłbym to. To nie jest język do ocalenia. Cesarz nie ma ubrania.
Nienawidzimy tego. Nienawidzimy tego na zawsze . Niech umrze umrze umrze !