Não, não virei nutricionista. É que este post é para falar de açúcar sintático, syntactic sugar em inglês, que é, em poucas palavras, o uso de operadores e construções da linguagem reduzem a escrita de um código maior e, assim como tudo, não pode deixar de existir na linguagens modernas e ao mesmo tempo não deve ser exagerado.
Nem sempre o açúcar sintático simplifica, pois às vezes tornam a leitura mais difícil, mas por outro lado economizam tempo -e tempo é dinheiro.
Vou citar um exemplo clássico, o operador ternário "? :"
Quem aqui né amigo não teve que escrever um código assim:
if (atraso > 10) { multa = 12.4; } else { multa = 0.0; }Embora o código esteja em Java a construção é inerente a qualquer linguagem.
O mesmo código pode ser escrito usando o operador ternário, que é um açúcar sintático pois na prática ele compila, ou interpreta, para o código acima. Exemplo:
multa = atraso > 10 ? 12.4 : 0.0;As linguagens estão cada vez mais adicionando açúcar sintático e uma que simpatizo muito é Ruby, entretanto como desenvolvedor Java sinto falta de um especialmente: o operador Elvis!
O "Elvis" -não me pergunte por que chamam assim, só sei o que dizem: "Elvis não morreu"- é uma simplificação do operador ternário para verificação de nulos. Por exemplo, imagine que desejes atribuir o valor de um parâmetro a uma variável, entretanto caso este parâmetro seja nulo é necessário atribuir um valor padrão. Vou propor um estudo de caso e uma implementação fictícia no código abaixo usando o clássico "if":
if (param.get("action") != null) { acao = param.get("action"); } else { acao = "listar"; }O mesmo código poderia ser escrito assim:
acao = param.get("action") != null ? param.get("action") : "listar";
Esta sintaxe com operador ternário simplifica bastante porém ainda é possível simplificar ainda mais usando, bem, o Elvis! Abaixo uma implementação fictícia usando C#:
acao = param["action"] ?? "listar";Bem melhor não concorda?
Java está meio atrasado nesta corrida por facilitação de sintaxe, o operador Elvis estava previsto para ser inserido no Java 7 e não rolou. A princípio ele teria a mesma sintaxe do Groovy, assim:
acao = param.get("action") ?: "listar";Em Ruby ele é diferente sendo assim:
acao = param[:action] || "listar"E pior, atualmente até o PHP tem, a partir da versão 5.3.
Enfim, o Java mostra sinais de idade e espero sinceramente que a Oracle com o Java 8 adicione mais liberdade a linguagem sem perder a elegância, a tipagem forte e robustez que o Java tem.
3 comentários:
Se chama elvis operator por causa da semelhança do operador com o cabelo do Elvis. Acho que, usando doses altas de abstração, dá de imaginar um topete vendo '?:'. auhsuahsuahs
Hehehehe... Se os programadores entrassem no mundo das pinturas abstratas, coitados dos artistas...
É verdade Jess! Olha, como disse o Leonardo, sou péssimo para estas abstrações visuais, hehehheeheh
Postar um comentário