sexta-feira, 24 de novembro de 2017

Perl é ilegível

...para quem não sabe Perl. Claro. Mas é uma provocação que escuto muito de meus colegas que gostam de Java. Eu também gostava, mas antes dela tentar tanto se transformar numa linguagem hipster.

Bom, resolvi comparar a legibilidade com um problema simples: tenho um array e quero criar um string com a concatenação de todos os elementos não vazios.


my $s=join ';', grep {length>0} @lista;

Parece bem razoável. Um colega apresentou uma solução em Python.

s=';'.join([x for x in lista if len(x)>0])

Gostei. Simples e claro. Dá para usar. Já minha primeira tentativa em Java foi um pouco mais prolixa:

String s=String.join(";",(new ArrayList(lista))
  .removeAll(Arrays.asList("", null)));

String e String, ArrayList, Arrays e asList. Parece um poema concreto.

Um colega apontou o fato de haver uma alternativa mais moderna:

String s=lista.stream()
  .filter(s->s!=null && s.length()>0)
  .collect(Collectors.joining(";"));

Tive que quebrar esta solução moderna em 3 linhas para caber neste pequeno blog.