Java
Період. Повна зупинка. Кінець історії.
З чого почати? О, я знаю, з чого почати: шалено складні, некрасиві та нерозумні, нерозумні і породжені дженерики на Java . Потрібно сказати більше? :( Добре, тоді: введіть стирання .
Тоді є недетерміноване управління ресурсами. Ловець Kewl!
Що далі? О так: дурні реджекси Яви - це моя найприємніша, кипляча яловичина. Я не можу підрахувати, скільки разів мене шлангували, не маючи достатньої кількості зворотних нахилів. Це ще гірше, ніж не мати доступу до будь-яких властивостей Unicode з цього тисячоліття - що є повною мірою. Застаріло десять фрикційних років !!!Зовсім марно. Сміття.
Тоді є помилка, що ярлики класів символів не працюють на не-ASCII. Який королівський біль! І навіть не думайте використовувати \p{javaWhiteSpace}
; це не робить все правильно з кількома дуже поширеними кодовими точками пробілу Unicode.
Чи знаєте ви, що є \p{javaJavaIdentifierStart}
власність? Про що вони думали? Тож раді, що вони отримали таких розумних улюбленців вуркіна на жорсткій основі.
Ви коли-небудь намагалися використовувати прапор CANON_EQ? Чи знаєте ви, що це насправді , а що він не робить? Як щодо так званого “випадку Unicode”? Купа нормальних речей з корпусом просто не працює.
Тоді їм важко писати рентабельні реджекси. Java досі не розгадала, як писати багаторядкові рядки, тож ви нарешті пишете такі божевільні речі:
"(?= ^ [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"
Що це за ті новинки? О, просто дурість Java. Вони використовували коментарі Perl, а не коментарі Java ( ідіоти! ), Які йдуть до кінця рядка. Тож якщо ви не покладете їх\n
там, ви відсікаєте решту своєї схеми. Дух і подвійний дух!
Не використовуйте реджекси на Java: ви просто захочете розбити речі, все так боляче і зламано. Я не можу повірити, що люди мирилися з цим. Деякі ні .
Тоді ми можемо почати говорити про ідіотські дурниці Яви з кодуванням. По-перше, існує той факт, що кодування платформи за замовчуванням завжди є кульгавим 8-бітовим кодуванням, навіть якщо замовниками Java є Unicode. Тоді є те, як вони не створюють винятку щодо помилки кодування. Ви гарантовано отримаєте лайно. А як щодо цього:
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.
Яка різниця? Чи знаєте ви, що тільки один із них створить виняток, якщо у вас є помилка кодування? Решта просто мордочкою їх.
Тоді ідіотизм символів Java недостатній для утримання персонажа! Що, чорт задумали вони? Тому я називаю їх чархарами. Ви повинні написати такий код, якщо очікуєте, що він працює правильно:
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("."); }
}
}
І хто коли-небудь думає це зробити? Поруч ніхто.
Скільки символів там "\uD83D\uDCA9"
? Один чи два? Залежить від того, як ви їх рахуєте. Зрозуміло, що двигун регулярного вирівнювання має справу з логічними символами, тож візерунок ^.$
буде успішним, а шаблон ^..$
- невдалим. Це божевілля продемонстровано тут:
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.
Цей ідіотизм - це все, тому що ви не можете написати абсолютно розумне \u1F4A9
, і, звичайно, не отримуєте попередження про те, що не можете цього зробити. Це просто робить не так.
Стооопід.
Поки ми перебуваємо на цьому, вся \uXXXX
позначення є вродженим мозком мертвим. Препроцесор Java ( так, ви мене чули ) отримує це ще до того, як зробить Java, тому вам заборонено писати цілком розумні речі на кшталт "\u0022"
, тому що до того часу, як Java бачить це, його препроцесор перетворив його на """
, так що ви програєте. О, зачекайте, не якщо він знаходиться в регексі! Так що ви можете використовувати "\\u0022"
просто чудово.
Riiiiiiiight!
Чи знаєте ви, що в Java немає можливості isatty(0)
телефонувати? Вам навіть не дозволено думати про такі думки. Це було б не добре для вас.
А тут вся гидота класових.
Або той факт, що немає можливості вказати кодування вихідного файлу Java у тому самому вихідному файлі, щоб ви не втратили його? Я ще раз вимагаю знати: ЩО ПЕКЛО ДУМАЄТЬСЯ? »
Зупиніть безумство! Я не можу повірити, що люди миряться з цим сміттям. Це повний жарт. Я вважаю за краще привітатись до Вальмарта, ніж пережити стропи та стріли шаленого божевілля Яви. Це все зламано, і вони не тільки не можуть його виправити, вони не виправлять.
Це тими самими лисицями-виноградами, які пишалися мовою, яка забороняла printf()
функціонувати незаконно . Боже, це впевнено спрацювало добре, хіба це не було !?
Чисті нумбочки. Сучка-плескання для них занадто доброзичлива. Якби я хотів програмувати в асемблері, я б. Це не врятована мова. У імператора немає одягу.
Ми ненавидимо це. Ми ненавидимо це назавжди . Нехай помирає, помирає, помирає !