Джава
Период. Полная остановка. Конец истории.
Когда начать? О, я знаю, с чего начать: Java - безумно сложный, уродливый, глупый и по своей сути сломанный дженерик. Нужно ли мне сказать больше? :( Хорошо, хорошо, тогда: erasure .
Тогда есть недетерминированное управление ресурсами. Kewl Footcher!
Что дальше? Ах да: глупые регулярные выражения Java - моя самая раздражающая, кипящая говядина. Я не могу сосчитать, сколько раз меня держали в руке из-за недостатка обратной косой черты. Это даже хуже, чем отсутствие доступа к каким-либо свойствам Юникода в этом тысячелетии, что вполне закономерно. Десять офигенных лет устарели !!! Совершенно бесполезно. Мусор это.
Тогда есть ошибка, что ярлыки класса персонажа не работают на не-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: вы просто захотите разбить вещи, все это так больно и сломано. Я не могу поверить, что люди терпят это. Некоторые нет .
Тогда мы можем начать говорить об идиотской бессмыслице 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
, и, конечно, вы не получите никакого предупреждения, что вы не можете этого сделать. Это просто делает неправильную вещь.
Stoooopid.
Пока мы в этом, вся \uXXXX
нотация врожденно умерла. Препроцессор Java ( да, вы слышали меня ) добирается до этого раньше, чем Java, поэтому вам запрещено писать совершенно разумные вещи, например "\u0022"
, потому что к тому времени, когда Java это видит, его препроцессор превратил его в """
, и вы проиграете. Ой , подождите, не , если это в регулярном выражении! Таким образом, вы можете использовать "\\u0022"
просто отлично.
Riiiiiiiight!
Знаете ли вы, что в Java нет способа сделать isatty(0)
звонок? Тебе даже не позволено думать такие мысли. Это не будет хорошо для вас.
И затем есть вся мерзость пути класса.
Или тот факт, что невозможно указать кодировку исходного файла Java в том же исходном файле, чтобы вы не потеряли его? Я еще раз требую знать: ЧТО, ЧТО ОНИ МЫ ДУМАЛИ?
Останови безумие! Я не могу поверить, что люди терпят этот мусор. Это полная шутка. Я бы предпочел быть приветствующим Walmart, чем страдать от слингов и стрел возмутительного безумия на Яве. Это все сломано, и они не только не могут это исправить, но и не могут это исправить.
Это те же самые люди-лисички, которые гордились тем, что сделали незаконным printf()
функционирование. Ну и дела, что действительно сработало очень хорошо, не так ли?
Чистые черепа. Шлепки слишком добры к ним. Если бы я хотел программировать на ассемблере, я бы. Это не подлежащий спасению язык. У императора нет одежды.
Мы ненавидим это. Мы ненавидим это навсегда . Пусть умирает, умирает, умирает !