Jawa
Periode. Titik. Akhir dari cerita.
Mulai dari mana? Oh, saya tahu harus mulai dari mana: Java generik yang sangat rumit dan jelek serta bodoh dan secara inheren rusak . Perlu saya katakan lebih? :( Oke, kalau begitu: ketik erasure .
Lalu ada manajemen sumber daya non-deterministik. Feetcher Kewl!
Apa selanjutnya? Oh yeah: regex bodoh Jawa adalah daging sapi yang paling menjengkelkan dan menggelisahkan saya. Saya tidak bisa menghitung berapa kali saya disemprot dengan tidak memiliki cukup banyak serangan balasan. Ini bahkan lebih buruk daripada tidak memiliki akses ke properti Unicode dari milenium ini - yang benar-benar sempurna. Sepuluh tahun berlalu !!! Benar-benar tidak berguna. Buang itu.
Lalu ada bug yang tidak berfungsi pada pintasan kelas karakter pada non-ASCII. Apa yang menyakitkan kerajaan! Dan bahkan tidak mempertimbangkan untuk menggunakan \p{javaWhiteSpace}
; itu tidak melakukan hal yang benar dengan beberapa titik kode spasi putih Unicode yang sangat umum.
Tahukah Anda ada \p{javaJavaIdentifierStart}
properti? Apa yang mereka pikirkan? Senang sekali mereka mendapat peepers cerdas seperti itu pada hard disk.
Pernah mencoba menggunakan bendera CANON_EQ? Apakah Anda tahu itu memang benar , dan apa yang tidak dilakukannya? Bagaimana dengan yang disebut "Unicode case"? Sekelompok hal casing normal tidak berfungsi sama sekali.
Kemudian mereka membuat sulit untuk menulis regex yang bisa dipertahankan. Java masih belum menemukan cara menulis string multiline, jadi Anda akhirnya menulis hal-hal gila seperti ini:
"(?= ^ [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"
Apa semua baris baru itu? Oh, kebodohan Jawa saja. Mereka menggunakan komentar Perl, bukan komentar Java ( idiot! ) Yang masuk sampai akhir baris. Jadi jika Anda tidak meletakkannya \n
di sana, potonglah seluruh pola Anda. Duh dan duh ganda!
Jangan menggunakan regex di Jawa: Anda hanya akan ingin menghancurkan sesuatu, itu semua sangat menyakitkan dan rusak. Saya tidak percaya orang-orang tahan dengan ini. Beberapa tidak .
Kemudian kita dapat mulai berbicara tentang omong kosong bodoh Jawa dengan penyandian. Pertama, ada fakta bahwa pengkodean platform default selalu beberapa pengkodean 8-bit timpang meskipun charkar Java adalah Unicode. Lalu ada bagaimana mereka tidak memunculkan pengecualian pada kesalahan pengkodean. Anda dijamin akan mendapatkan omong kosong. Atau bagaimana dengan ini:
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.
Apa bedanya? Tahukah Anda bahwa hanya satu di antaranya yang akan memunculkan pengecualian jika Anda memiliki kesalahan penyandian? Sisanya hanya memberangus mereka.
Lalu ada kebodohan karakter Jawa tidak cukup untuk memegang karakter! Apa yang mereka pikirkan? Itu sebabnya saya menyebut mereka charchars. Anda harus menulis kode seperti ini jika Anda mengharapkannya berfungsi dengan benar:
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("."); }
}
}
Dan siapa yang pernah berpikir untuk melakukan itu? Di sebelah siapa pun.
Ada berapa karakter "\uD83D\uDCA9"
? Satu atau dua? Tergantung pada bagaimana Anda menghitungnya. Mesin regex tentu saja berurusan dengan karakter logis, sehingga suatu pola ^.$
akan berhasil dan suatu pola ^..$
akan gagal. Kegilaan ini ditunjukkan di sini:
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.
Kebodohan itu adalah semua karena Anda tidak dapat menulis yang masuk akal \u1F4A9
, juga tidak ada peringatan bahwa Anda tidak dapat melakukannya. Itu hanya melakukan hal yang salah.
Stoooopid.
Sementara kita melakukannya, seluruh \uXXXX
notasi secara bawaan mati otak. Java preprocessor ( ya, Anda dengar saya ) melakukannya sebelum Java melakukannya, jadi Anda dilarang menulis hal-hal yang masuk akal seperti "\u0022"
, karena pada saat Java melihat itu, preprocessornya telah mengubahnya menjadi """
, jadi Anda kalah. Oh, tunggu, tidak jika itu dalam regex! Jadi Anda bisa menggunakan dengan "\\u0022"
baik.
Riiiiiiiight!
Apakah Anda tahu tidak ada cara di Jawa untuk melakukan isatty(0)
panggilan? Anda bahkan tidak diizinkan berpikir seperti itu. Itu tidak baik untukmu.
Dan kemudian ada seluruh kekejian classpath.
Atau fakta bahwa tidak ada cara untuk menentukan pengkodean file sumber Java Anda di file sumber yang sama sehingga Anda tidak kehilangan itu? Sekali lagi saya ingin tahu: APA NERAKA MEREKA BERPIKIR‽‽‽
Hentikan kegilaan! Saya tidak percaya orang-orang tahan dengan sampah ini. Ini benar-benar lelucon. Saya lebih suka menjadi penyapa Walmart daripada menderita umban dan panah kegilaan Jawa yang keterlaluan. Itu semua rusak, dan mereka tidak hanya tidak bisa memperbaikinya, mereka juga tidak akan memperbaikinya.
Ini oleh orang-orang foxy-anggur yang sama yang membanggakan diri pada bahasa yang membuatnya ilegal untuk memiliki printf()
fungsi. Astaga, itu benar - benar bekerja dengan baik, kan !?
Numbskull belaka. Menampar jalang terlalu baik untuk mereka. Jika saya ingin memprogram assembler, saya akan melakukannya. Ini bukan bahasa yang bisa diselamatkan. Kaisar tidak punya pakaian.
Kami membencinya. Kami membencinya selamanya . Biarkan mati, mati, mati !