Como evitar if (condição)

Para deixar o código mais bonito qual é o pattern que usamos para evitar os if’s???
A única que trabalho é com reflection… legal, mas mtas vezes não da para usar reflection… e agora?
e é o if que sempre resolve bugs rsrsr
e agora…

if(isIf())?

A questao nao e evitar IF, e sim evitar o USO ABUSIVO de IF.

mas o certo seria evitar ao máximo certo?

como fazer?

blz vlw… vou dar uma olhada com calma neste cara…

[quote=lelodois]Para deixar o código mais bonito qual é o pattern que usamos para evitar os if’s???
A única que trabalho é com reflection… legal, mas mtas vezes não da para usar reflection… e agora?
e é o if que sempre resolve bugs rsrsr
e agora…
[/quote]

O não uso de if está diretamente relacionada ao uso de polimorfismo e inversão de controle.
Formalmente o seu codigo faz if para decidir o que fazer a seguir baseado em alguma propriedade de algum objeto.
Isto acontece pq vc não está deixando o objeto fazer o trabalho e está chamando para si a decisão.
Se o objeto já está lá com o valor da propriedade porque não deixar ele fazer o trabalho para essa propriedades ?

Moral da historia: vc implementa um metodo no objeto e invoca o método simplesmente. Sem ifs.
Conforme o objeto é diferente ou seu estado é diferente o resultado da invocação será diferente.

Dois padrões relacionados com isto : State e Strategy.
State define métodos com base em um estado. É util para mudar de estado onde cada método significa uma ação sobre o estado.

Stategy define algoritmos com base me propriedades. O objeto principal escolhe uma estratégia com base nos seus atributos e invoca um método no objeto estratégia 9passando-se a si mesmo para parametro , ou não). Aqui ha um if na decisão da escolha da estratégia, mas isso fica dentro do objeto principal e não espalhado pelo seu codigo. Quando uma estratégia nova aparecer o objeto principal terá mais um else, mas vc não terá que mudar o codigo que invoca o objeto principal. Como se espera que vc invoque o objeto principal muitas vezes é um ganho de não repetir o if de decisão em todo o lugar ao longo do seu codigo. ( é o principio de não repetir código. Código repetido é código não encapsulado)

Eu não diria “evitar ifs”. Se o código é complexo, é complexo e acabou.

Eu diria que muitas vezes:

  • As pessoas não sabem usar “&&” ou “||”.
    Então muitas vezes se usa a programação que chamo “triangular” porque as listagens ficam com aninhamentos imensos - 5 ifs, um dentro do outro, porque a pessoa não sabe usar “&&”.

  • As pessoas não sabem usar exceptions direito, e acabam testando um monte de condições de erro pelo retorno dos métodos, como se ainda estivéssemos usando C (é claro que C++ também tem exceptions).

Acredito tambem que evitar ifs não exista.
Você deve desenvolver seu codigo apenas com uma logica simples e objetiva.
(Opinião minha)

Acredito tambem que evitar ifs não exista.
Você deve desenvolver seu codigo apenas com uma logica simples e objetiva.
(Opinião minha)[/quote]

Para mim, quanto mais um sistema usa if menos ele usa da oo.
Acredito que a oo tem muitos recursos que nos faz esquecer um pouco os if’s

Concordo com você lelodois, na minha opinião, evitar “ifs” é uma boa prática, além de que, normalmente você acaba deixando o código mais orientado a objetos, e desta forma, mais inteligível.
E se você analisar, muitos padrões de projeto usam o acoplamento abstrato para resolver este “problema”, um exemplo desses é o próprio Strategy que citei acima.

[quote=pozzo]Concordo com você lelodois, na minha opinião, evitar “ifs” é uma boa prática, além de que, normalmente você acaba deixando o código mais orientado a objetos, e desta forma, mais inteligível.
E se você analisar, muitos padrões de projeto usam o acoplamento abstrato para resolver este “problema”, um exemplo desses é o próprio Strategy que citei acima.[/quote]

Isto ai pozzo!!!
tenho que parar e ver este esquema de abstract com calma…
sei que existem diversos meios e frameworks (injeção de dependencias, aop, spring)
mas mesmo assim, qdo vc pega um sistema já pronto para dar manutenção é meio que uma obrigatorieadde colocar if
para resolver bugs… isto que eu quero evitar, saco?

vlw
agradeço pela opiniao de todos

[quote] Para mim, quanto mais um sistema usa if menos ele usa da oo.
Acredito que a oo tem muitos recursos que nos faz esquecer um pouco os if’s[/quote]

Não quis dizer que era pra usar if’s “adoidado” rs
só disse que existem casos que tem de usar.mas que sempre devemos buscar um codigo limpo . e bem claro.
só isso. não discordo de vocês.
afinal estou aqui para adquirir experiencia. e não para critica-los rsrs :slight_smile:

[quote=Raffrel][quote] Para mim, quanto mais um sistema usa if menos ele usa da oo.
Acredito que a oo tem muitos recursos que nos faz esquecer um pouco os if’s[/quote]

Não quis dizer que era pra usar if’s “adoidado” rs
só disse que existem casos que tem de usar.mas que sempre devemos buscar um codigo limpo . e bem claro.
só isso. não discordo de vocês.
afinal estou aqui para adquirir experiencia. e não para critica-los rsrs :slight_smile: [/quote]

Entendi rafael, você quis dizer que não e “proibido” usar ifs rsrs
saquei, realmente existem algumas situações que não tem como a gente evitar.
vlw

Ressuscitando…

Gostou do tema? Olhe também
http://www.guj.com.br/posts/list/55885.java

Abraços