Você sabia que tem muitos programadores que dispensam o uso do else? Sim, tem gente que tem verdadeira fobia a ele e até discrimina quem usa, mas porque?
Na InterConPHP do ano passado (atual PHP Experience 2015, na qual eu vou!) Guilherme Blanco deu uma excelente palestra (Object Calisthenics e Clean Code) e falou sobre o assunto (https://www.youtube.com/watch?v=u-w4eULRrr0), como está chegando o evento novamente me animei em falar sobre esse assunto.
O ideal é que seu código tenha o mínimo de caminhos a percorrer possíveis, isso facilita o entendimento do código e reduz drasticamente a complexabilidade, e se fica menos complexo diminui a chance de erros possíveis. Isso é chamado de Cyclomatic Complexity.
Gostou deste artigo?
Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!
Entre outras coisas que podem complicar sua vida está o else. A regra então é negar tudo até o fim, vamos ver um exemplo prático.
class CyclomaticComplexity
{
public function checkAnyNumber($n)
{
if (is_int($n)) {
if ($n >= 10) {
return $n;
} else {
return false;
}
} else {
return false;
}
}
}
O código acima recebe um valor qualquer que verifica se este é um número, se não for deve retornar false, se for ele novamente verifica se é maior ou igual a 10 e retorna o valor enviado em caso de sucesso, se não retorna false.
Aplicando a técnica de negar tudo teremos:
class CyclomaticComplexity
{
public function checkAnyNumber($n)
{
if (!is_int($n) or $n < 10)
return false;
return $n;
}
}
Note que ele faz a mesma coisa que o primeiro exemplo, porém o código é muito mais enxuto e elegante. A única coisa que fiz foi remover juntar os ifs em um através do operador or e inverter os operadores (negando com ! o primeiro e trocar o >= por <). O return sempre para a execução de um método quando é chamado e isso deve sempre ser usado a seu favor. O Guilherme deu outras dicas na palestra (vou deixar ai em baixo) e tem outro exemplo sobre o "Não uso do else". E voce? Posta um exemplo seu sobre legibilidade no gist.github.com e manda o link ai nos comentários. Será que podemos aposentar o else de vez no PHP?
Para ir direto ao assunto deste tutorial vá até 15:06.