Java
Dönemi. Tam dur. Hikayenin sonu.
Nereden başlamalı? Oh, nereden başlayacağımı biliyorum: Java delicesine karmaşık, çirkin ve aptal ve doğuştan kırılmış jenerikler. Daha da anlatmalı mıyım? :( Tamam, o zaman: silmeyi yazın .
Daha sonra deterministik olmayan bir kaynak yönetimi var. Kewl ayak avcısı!
Sırada ne var? Oh evet: Java'nın aptal regexleri benim en rahatsız edici, bir şey sığır etidir. Yeterli ters eğik çizgi olmamasından kaç kez hortumlandığımı sayamıyorum. Bu, bu binyılın hiçbir Unicode özelliğine erişememekten daha kötüdür - ki bu tam bir boğadır. On yıl dolmuş yıllar !!! Tamamen işe yaramaz. Çöp.
Sonra karakter sınıfı kısayollarının ASCII dışı üzerinde çalışmadığı bir hata var. Ne kraliyet acısı! Ve kullanmayı düşünmeyin bile \p{javaWhiteSpace}
; Birçok yaygın Unicode boşluk kodu koduyla doğru olanı yapmaz.
Bir \p{javaJavaIdentifierStart}
mülk olduğunu biliyor muydun ? Ne düşünüyorlardı ki? Bu kadar akıllı gözetmenlerin zorlaştığına sevindim.
CANON_EQ bayrağını kullanmayı denediniz mi? Bunu biliyor musunuz gerçekten yapar ve ne değil mi? “Unicode dava” denen şey nasıl? Bir sürü normal kılıf işi hiç işe yaramıyor.
Ardından bakım yapılabilir regex'leri yazmakta zorlanıyorlar. Java hala çok satırlı karakter dizileri yazmayı çözemedi, bu yüzden böyle çılgınca şeyler yazıyorsunuz:
"(?= ^ [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"
Bütün bu yeni hatlar hangileri? Oh, sadece Java aptallığı. Perl yorumlarını kullandılar , satır sonuna kadar giden Java yorumlarını ( aptallar! ). Öyleyse onları \n
oraya koymazsan , kalıplarının kalanını kesersin. Duh ve çift duh!
Java'da regex'leri kullanmayın: bir şeyleri parçalamak istediğinizde biteceksiniz, hepsi çok acı verici ve bozuk. İnsanların buna katlandığına inanamıyorum. Bazıları yapmaz .
O zaman Java'nın aptal saçma sapan kodlamaları hakkında konuşmaya başlayabiliriz. Birincisi, Java'nın charchar'ları Unicode olsa bile, varsayılan platform kodlamasının her zaman bazı 8-bit kodlamalar olduğu gerçeği var. O zaman kodlama hatası konusunda bir istisna yaratmadılar. Bir bok almayı garanti ediyorsun. Veya buna ne dersiniz:
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.
Fark ne? Kodlama hatasınız varsa bunlardan sadece birinin istisna oluşturacağını biliyor muydunuz ? Gerisi sadece onları susturur.
Öyleyse Java karakterlerinin aptallığı bir karakteri tutmak için yeterli değil! Ne halt ediyorlar? Bu yüzden onlara charchars derim. Doğru çalışmasını beklerseniz, bunun gibi bir kod yazmanız gerekir:
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("."); }
}
}
Ve kim hiç bunu yapmayı düşünüyor? Kimsenin yanında.
Kaç karakter var "\uD83D\uDCA9"
? Bir yada iki? Onları nasıl saydığına bağlı. Regex motoru elbette mantıksal karakterlerle uğraşır, böylece bir desen ^.$
başarılı olur ve bir desen ^..$
başarısız olur. Bu delilik burada gösterilmiştir:
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.
Bu aptallık, çünkü tamamen makul bir yazı yazamazsınız \u1F4A9
, ya da elbette bunu yapamayacağınız bir uyarı almıyorsunuz. Sadece yanlış olanı yapıyor.
Stoooopid.
Biz varken, tüm \uXXXX
gösterim doğuştan beyin ölümüdür. Java önişlemcisi ( evet, beni duydunuz ) Java'dan önce alır, bu nedenle mükemmel makul şeyler yazmanız yasaktır "\u0022"
, çünkü Java bunu gördüğü zaman önişlemcisi çevirdiği için """
kaybedersiniz. Oh, bekle değil bu bir regex bu olsa da! Böylece "\\u0022"
gayet iyi kullanabilirsiniz .
Riiiiiiiight!
Java'da isatty(0)
arama yapmanın bir yolu olmadığını biliyor muydunuz ? Böyle düşünceler düşünmenize bile izin verilmiyor. Senin için iyi olmaz.
Ve sonra bütün sınıf patlaması yok oluyor.
Ya da aynı kaynak dosyadaki Java kaynak dosyanızın kodlamasını belirtmenin bir yolu olmadığı için kaybetmezsiniz. Bir kez daha bilmek istiyorum: NE BÜYÜK İNDİRENLER NELERDİR?
Deliliği durdur! İnsanların bu çöplere katlandığına inanamıyorum. Bu tam bir şaka. Çirkin Java deliliğinin sapanlarından ve oklarından muzdarip olmak yerine bir Walmart selamlayıcısı olmayı tercih ederim. Her şey kırıldı ve onlar sadece bunu düzeltemez, onlar olmaz bunu düzeltmek.
Bu, kendilerini bir printf()
işleve sahip olmayı yasa dışı kılan bir dille gururlandıran kurnaz askerler tarafından aynı . Gee, bu kesinlikle iyi çalıştı, ama olmadı !?
Sırf uyuşuk gözler. Kaltak tokatlamak onlar için çok kibar. Ben montajcı programlamak isteseydim, yapardım. Bu kurtarılabilir bir dil değil. Kral Çıplak.
Ondan nefret ediyoruz. Sonsuza dek nefret ediyoruz . Bırak öl öl öl !