Java
Período. Ponto final. Fim da história.
Onde começar? Ah, eu sei por onde começar: os genéricos incrivelmente complicados, feios, estúpidos e inerentemente quebrados de Java . Preciso dizer mais? :( Ok, tudo bem, então: digite apagamento .
Depois, há um gerenciamento não determinístico de recursos. Kewl footcher!
O que vem a seguir? Ah, sim: as expressões estúpidas de Java são a minha carne mais irritante e fervilhante. Não sei contar quantas vezes fui manejado por não ter barras invertidas suficientes. Isso é ainda pior do que não ter acesso a nenhuma propriedade Unicode deste milênio - o que é um touro completo. Dez anos de desatualização desatualizados !!! Completamente inútil. Jogue fora.
Depois, há o erro de que os atalhos da classe de caracteres não funcionam em não-ASCII. Que dor real! E nem pense em usar \p{javaWhiteSpace}
; ele não faz a coisa certa com vários pontos de código de espaço em branco Unicode muito comuns.
Você sabia que há um \p{javaJavaIdentifierStart}
propriedade? O que eles estavam pensando? Tão contentes por terem peepers tão espertos que se desentendem.
Já tentou usar o sinalizador CANON_EQ? Você sabe o que realmente faz e o que não faz? Que tal o chamado "caso Unicode"? Um monte de coisas normais da caixa simplesmente não funcionam.
Eles dificultam a criação de regexes de manutenção. O Java ainda não descobriu como escrever strings de múltiplas linhas, então você acaba escrevendo coisas insanas como esta:
"(?= ^ [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"
Quais são todas essas novas linhas? Oh, apenas estupidez em Java. Eles usaram comentários Perl, não comentários Java ( idiotas! ), Que vão até o final da linha. Portanto, se você não colocar as que \n
estão lá, corta o restante do seu padrão. Duh e double duh!
Não use expressões regulares em Java: você acabará querendo esmagar as coisas, tudo é tão doloroso e quebrado. Não acredito que as pessoas aguentam isso. Alguns não .
Então podemos começar a falar sobre o absurdo idiota de Java com codificações. Primeiro, há o fato de que a codificação da plataforma padrão é sempre uma codificação sem graça de 8 bits, mesmo que os charchars de Java sejam Unicode. Depois, há como eles não geram uma exceção em um erro de codificação. Você está garantido para receber porcaria. Ou que tal:
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.
Qual é a diferença? Você sabia disso apenas um deles gerará uma exceção se você tiver um erro de codificação? O resto apenas açaima.
Depois, há a idiotice dos caracteres Java que não são suficientes para conter um caractere! Que diabos eles estão pensando? É por isso que eu os chamo de caracteres. Você precisa escrever um código como este se espera que funcione corretamente:
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("."); }
}
}
E quem pensa em fazer isso? Ao lado de ninguém.
Quantos caracteres existem "\uD83D\uDCA9"
? Um ou dois? Depende de como você os conta. É claro que o mecanismo regex lida com caracteres lógicos, portanto, um padrão ^.$
será bem-sucedido e ^..$
falhará. Essa loucura é demonstrada aqui:
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.
Essa idiotice é tudo porque você não pode escrever o texto perfeitamente razoável \u1F4A9
, nem é claro que recebe qualquer aviso de que não pode fazer isso. Apenas faz a coisa errada.
Stoooopid.
Enquanto estamos nisso, toda a \uXXXX
notação é congenitamente com morte cerebral. O pré-processador Java ( sim, você me ouviu ) chega antes do Java, então você está proibido de escrever coisas perfeitamente razoáveis como "\u0022"
, porque, quando o Java vê isso, seu pré-processador o transformou """
, então você perde. Oh espere, não se estiver em um regex! Então você pode usar"\\u0022"
muito bem.
Riiiiiiiight!
Você sabia que não há como o Java fazer uma isatty(0)
ligação? Você nem tem permissão para pensar em tais pensamentos. Não seria bom para você.
E depois há toda a abominação do caminho de classe.
Ou o fato de que não há como especificar a codificação do seu arquivo de origem Java no mesmo arquivo de origem para não perdê-lo? Mais uma vez eu exijo saber: O QUE diabos eles estavam pensando‽‽‽
Pare a loucura! Não acredito que as pessoas suportam esse lixo. É uma piada completa. Prefiro ser um cumprimentador do Walmart do que sofrer os golpes e flechas da insanidade ultrajante em Java. Está tudo quebrado, e eles não apenas não podem consertar, mas não consertam.
Isso pelas mesmas pessoas engraçadas que se orgulhavam de uma linguagem que tornava ilegal ter uma printf()
função. Puxa, isso certeza funcionou muito bem, não foi !?
Pura numbskulls. Tapa na puta é muito gentil para eles. Se eu quisesse programar em assembler, faria. Esta não é uma linguagem salvável. O imperador não tem nenhuma roupa.
Nós odiamos isso. Nós odiamos isso para sempre . Deixe morrer, morrer, morrer !