Quem disse?
Isso ajuda a ilustrar o que eu sempre falo sobre boas práticas, inclusive em minha palestra "A péssima prática de seguir boas práticas".
Nem sempre quem fala sobre a tal boa prática é uma autoridade no assunto. Pode até ser uma pessoa famosa, mas não quer dizer que seja autoridade. Mesmo que seja, ela pode errar naquele ponto.
Mas o pior é que as pessoas passam repetir aquilo, muitas vezes perdendo a essência do que ela diz. E aí vem o que é o problema da boa prática.
Sem explicação do motivo dela ser assim, ela é ruim. Sem considerar o contexto que vai usar, ela é ruim. Se você sabe a motivação de usar ela não é mais uma boa prática e sim uma técnica com justificativa. É um conhecimento adquirido para aplicar conforme o contexto.
Então antes de saber como fazer isso, deveria saber porque deveria. Se ninguém explicou, ignore, é "cagação de regra". Com a explicação muda tudo, mesmo que seja o mesmo resultado. E isso deve valer para qualquer coisa na vida. Questione tudo o que te empurram. Ainda mais em programação. Sua função profissional é questionar.
Tem casos que:
- deve sim evitar um
if
, e usar uma sobrecarga, ou polimorfismo - deve suprimir um
if
ou umelse
que claramente é desnecessário por causa da lógica aplicada ali - pode ser melhor usar um
switch
ou um pattern matching - deve compor a condição para resolver em apenas um
if
que executa a mesma coisa. - pode ser que seja melhor usar um operador condicional (que as pessoas chamam equivocadamente de ternário).
- deve mudar a ordem de execução para evitar o
if
(early return ou faz entrar em um primeiro, não precisa mais verificar os outros) - um
try-catch
pode ser melhor, ainda que costuma acontecer mais o contrário e o usam onde deveria ter umif
- um monte de
if
pode virar um só dentro de um laço - precisa da condição mas não do
if
.
Por exemplo:
if (x ==1) return true;
else return false;
pode ser escrito como:
return x == 1;
Esse é um exemplo. Em cada caso pode ter situação que merece reduzir. De forma geral fica complicado dizer. Não pegue uma solução e fique procurando um problema para aplicá-la, quando tem um problema, procure pela solução.
Não dá para reduzir um if
absolutamente necessário.
Dá para seguir outras regras, que não são o if
em si, como por exemplo, em vez de fazer uma condição, chamar uma função ou variável com um nome significativo para pegar o resultado no if
. Isso evita comentários. Mas tem casos que não precisa de nada disso. Tem caso que o comentário é melhor.
aceito = x == 1;
if (aceito) return Status.Aceito;
Precisa aprender álgebra booleana para reduzir ou compor as expressões lógicas. Não é o if
mas é como usá-lo melhor. Expressão lógica é uma coisa, if
(comando de seleção e desvio) é outra bem diferente, e precisa entender isso.
E estude toda a computação, para ter subsídios, ferramentais na sua mente que permitam você tomar a melhor decisão.
Procure dar exemplos para saber como reduzir cada um deles. Pode ser que a questão nem seja do if
em si, pode ser a expressão lógica, ou a organização do código em torno dele.
Eu e outras pessoas já respondemos bastante sobre isso, nem vou pesquisar tudo, só alguns exemplos:
- https://pt.stackoverflow.com/q/4731/101
- https://pt.stackoverflow.com/q/427782/101
- https://pt.stackoverflow.com/q/41499/101
- https://pt.stackoverflow.com/q/58192/101
- https://pt.stackoverflow.com/q/165494/101
- https://pt.stackoverflow.com/q/315434/101
- https://pt.stackoverflow.com/q/44741/101
- https://pt.stackoverflow.com/q/124304/101
- https://pt.stackoverflow.com/q/408772/101
- https://pt.stackoverflow.com/q/339064/101
- https://pt.stackoverflow.com/q/387468/101
- https://pt.stackoverflow.com/q/511886/101
- https://pt.stackoverflow.com/q/53572/101
- https://pt.stackoverflow.com/q/4907/101
- https://pt.stackoverflow.com/q/393932/101
- https://pt.stackoverflow.com/q/420854/101
- https://pt.stackoverflow.com/q/2477/101
Não tem atalhos para aprender programação. Até tem, mas eles não te levam pro mesmo caminho.
Faz sentido para você?
Espero ter ajudado.
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).