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
variable
tiver o valorTrue
, então a linha 2 irá executar e a função devolveTrue
. - se
variable
tiver 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
expr
tiver o valorTrue
, então a linha 2 irá executar e a variávelvar
recebeTrue
- se
expr
tiver o valorFalse
, então a linha 4 irá executar e a variávelvar
recebeTrue
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.