Indo além#
Agora que já estamos conseguindo resolver pequenos problemas usando if, vamos ir além e escrever código bom usando if. Os itens deste tópico incluem algumas construções prolixas e/ou confusas quando criamos código com expressões booleandas e condicionais if-elif-else. Não estamos interessados neste momento em mudar o comportamento do programa, mas sim em deixá-lo mais fácil de ler para outras pessoas que tenham experiência com Python.
Nesta página temos 5 erros comuns que atrapalham o entendimento e diminuem a clareza de programas escritos em Python. Vamos a eles.
Padrão 1 - if-true-return-true#
- se
variabletiver o valorTrue, então a linha 2 irá executar e a função devolveTrue. - se
variabletiver o valorFalse, então a linha 4 irá executar e a função devolveFalse.
Logo, a função sempre devolve o valor de variable! Podemos então reescrever este trecho como
O segundo código é mais compacto de se ler, além de também evidenciar que o valor retornado é o resultado da variável do if.
Padrão 2 - if-true-a-recebe-true#
- se
exprtiver o valorTrue, então a linha 2 irá executar e a variávelvarrecebeTrue - se
exprtiver o valorFalse, então a linha 4 irá executar e a variávelvarrecebeFalse
Logo, a variável var sempre recebe o valor de expr! Podemos então reescrever este trecho como
O segundo código é mais compacto de se ler, além de também evidenciar que o valor de var é o resultado da expressão expr. Esse padrão é muito parecido com o anterior, mas troca o return por uma atribuição.
Padrao 3 - if-true-elif-false#
Outro padrão comum é escrever tanto a condição que deve ser checada quanto o oposto dela. Veja abaixo um exemplo.
O bloco 2 só roda se a condição a != 5 for verdade, porém isso é equivalente à condição a == 5 ser falsa. Logo, nesse caso podemos simplesmente usar um else, como feito abaixo.
Padrão 4 - if-return#
Conectando com o primeiro padrão, podemos simplificar ainda mais situações que usam o padrão abaixo.
Como o bloco 1 termina com um return, o else não é necessário. Se o bloco 1 executar a função acaba sem executar bloco 2 e bloco 3. Se bloco 1 não rodar então os outros 2 sempre executam. Assim, podemos mudar o código acima para algo um pouco mais simples.
Padrão 5 - evitar negar condição do if#
Às vezes conseguimos facilmente identificar a condição em que NÃO devemos executar o código. Um padrão que temos observado neste caso é o seguinte.
Apesar de funcionar, o leitor desse código é que tem que descobrir qual é a condição em que o código de fato roda. Por isso, a melhoria apresentada neste exemplo é negar a expressão booleana e não usar else. Veja abaixo.
Colocando em prática#
Abra a lista de exercícios neste link para praticar a identificação e correção desses padrões de erros.