IFs em excesso é um problema no código?

No processo de aprendizado do Python, estou codando um jogo de terminal no estilo chatbot (digite 1 para isso… 2 para aquilo) e nesse projeto percebi o quanto preciso repetir IF para desenvolver o código de acordo com o meu conhecimento.

Aqui está uma print de um método que criei hoje, essa quantidade de condicionais é um problema no meu código? Existe uma solução para reduzir a quantidade de IFs?

1 curtida

Importante é funcionar, não importa como.
É isso, de acordo com o seu conhecimento!

3 curtidas

Acho que nesse caso, o ideal seria fazer uma conta para saber quais são os status em relação ao nível.

Exemplo:

# Multiplicando os status por um valor específico. Isso deixa o código muito mais versátil.
# Por exemplo, você pode facilmente criar comportamentos de "2x força" somente mudando os valores.

def atualizar_status(self):
	FORCA_ATAQUE = 10
	VIDA_MAX = 50

	nivel = self.nivel

	self.forca_ataque = nivel * FORCA_ATAQUE
	self.vida_atual = self.vida_max = (nivel * VIDA_MAX)
2 curtidas

Hm… interessante.
Basicamente definir atributos por meio de fórmulas.

Edit:
Consegui remover os IFs e adicionei fórmulas no lugar, acho que ficou bom.
Está funcionando, os valores finais agora serão um pouco diferentes, mas nada que atrapalhe.

3 curtidas

Sim, o código funciona.
Acho que está na ordem certa, primeiro aprendemos a usar condicional, e depois aprendemos a como reduzir a quantidade de IF.

1 curtida

Descobri uma forma inteligente de reduzir os IFs usando dicionários.

2 curtidas

A PRIMEIRA ABSOLUTA REGRA DE UM BOM CÓDIGO

Ele deve ser legível e auto-documentável.

Nesse caso, apesar dos seus IFs parecerem “errados”, o seu código é bastante legível e autoexplicativo.

A SEGUNDA REGRA: MANUTENÇÃO

Nesse caso, o seu código é parcialmente aprovado no quesito manutenção: é fácil encontrar certo nível, caso você tenha que atualizar os valores.

Porém, ele falha quando você precisar alterar a base de cálculo dos valores, ou caso você queira alterar todos os níveis.

SOLUÇÃO

  • Adicionar funções que calculem os valores. UMA FUNÇÃO separada para cada fórmula/algoritmo, e uma função final que junta todo, essa função “final”, é a que recebe o nível e coordena os cálculos, retornando os valores finais.
  • Ou uma solução bastante sucinta e que também é legível: crie dicionários.

UPDATE

Você sozinho já tinha descoberto as duas opções.

Só então sempre se lembre das duas regras que passei acima.

UPDATE 2

Lembre-se: o pior tipo de código que existe é o código que tenta ser “espertinho”, cheio de artimanha. Mesmo o próprio programador, em menos de 1 ano, se arrepende de códigos cheios de artimanhas, porque depois não consegue entender WTF o código quer dizer.

UPDATE 3

Hmm assunto interessante para um vídeo. :thinking:

3 curtidas

Muito obrigado pelas dicas.

Eu só tenho medo de lotar meu código com muitas funções, daí as que crio geralmente servem para várias tarrefas que possuem alguma relação.
Como no exemplo de solução que eu apresentei, onde a mesma função calcula todos os atributos do jogador.
Mas acho que isso é bobagem da minha cabeça, tenho que mudar essa ideia.

Quanto à questão da legibilidade, após pesquisar um pouco na internet percebi como isso é importante, por isso me esforço sempre para deixar o código fácil de entender.

1 curtida

Não há problema nenhum em ter bastante funções. Inclusive a mensagem é que cada função deve ter um único objetivo, mesmo que isso gere centenas de funções. Desde que elas sejam explicativas e tenham propósito, não há nenhum problema com volume.

2 curtidas