| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 15:57:42
|
danielpump
Debugger
Membro desde: 03/04/2011 00:58:33
Mensagens: 54
Offline
|
Então eu estou cursando a faculdade e como ainda estou aprendendo, conversando com os desenvolvedores aqui do serviço, ele me disseram, que é bom evitar o uso de Ifs e de Cases, tentar usar ao maximo polimorfismo
Não sei se realmente é verdade, fora que deve ser bem mais complexo, apesar de ser mais legivel, mas se é isso mesmo, como que se consegue fazer este tipo de alteração para todo o código, evitar usar os Ifs, como estou aprendendo para mim ainda parece um tanto quanto inviavel, apesar de eu realmente não gostar não consigo imaginar um trabalho desta forma
This message was edited 1 time. Last update was at 30/07/2011 07:53:47
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 16:04:10
|
chimufox
JavaBaby
Membro desde: 25/09/2010 20:02:09
Mensagens: 88
Offline
|
Sim, ifs pesam demais no processamento do algoritmo, e fora polimorfismo trazer a vantagem de dispensar o uso dos ifs, ele deixa o código mais elegante.
Ao longo de seus estudos você vai perceber que polimorfismo pode "fazer decisoes" dinamicamente em tempo de execução, algo que seria similar ao controle de fluxo if, porém bem mais elegante. (Não quis dizer que polimorfismo pode funcionar como if)
|
http://www.youtube.com/chimufox
Vídeo aulas de java / orientação a objetos e muito mais. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 16:07:53
|
danielpump
Debugger
Membro desde: 03/04/2011 00:58:33
Mensagens: 54
Offline
|
Então até entendi, mas se alguem puder me mostrar um exemplo ou link onde eu possa encontrar algo como este exemplo, que eu estou planejando meu TCC, é sempre bom aprender coisas novas para poder usar
mas vlw mesmo pela explicação, e é interessante, já que nunca gostei mutio de Ifs mesmo, acho que fica feio pakas...rsrs
mas nunca tinha pensando que podia ser tão "desusado" assim
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 16:08:34
|
danielpump
Debugger
Membro desde: 03/04/2011 00:58:33
Mensagens: 54
Offline
|
tbm não sabia que pesava, pensei que fosse bem simples e leve...rsrs
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 16:18:16
|
rmendes08
GUJ Master
![[Avatar]](/images/avatar/9ee855f3ce4dd40182183463232e2162.jpg)
Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Offline
|
Muita calma nessa hora, e bom senso pelo amor de Deus!!!
Esse pensamento é correto, mas não pode ser tomado ao pé da letra. Por exemplo, há alguns dias eu fiz um trabalho que era um editor de imagens vetoriais. A área de edição nada mais é do que um JPanel com o método de pintura sobrescrito. Em um determinado momento, as figuras armazenada em uma lista tem que ser desenhadas:
Como cada podem existir vários tipo de figura - linhas, quadrados, elipses - eu implementei isso em subclasses de Shape de forma que cada uma tem o conhecimento de como ser desenhada. Fiz assim ao invés de criar uma variável tipo e testar dentro do for o tipo com if's.
Porém, em um determinado momento, o painel pode ser exibido quando uma figura específica não acabou de ser desenhada:
Nesse caso, preciso usar o if pra testar se a variável é nula ou não.
Resumindo, evitar if's não significa começar uma caça às bruxas no seu código. Significa simplificar o seu código.
|
"A Técnica é transformada em Arte por quem a emprega"
"O futuro pertence àqueles que acreditam na beleza de seus sonhos"
Computadores Fazem Arte
http://www.uaijug.com.br
"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 16:21:00
|
j.silvestre
JavaChild
![[Avatar]](/images/avatar/4d1482d69ec2a6c0bdb57b240fa843b3.jpg)
Membro desde: 09/05/2010 10:42:22
Mensagens: 134
Localização: Curitiba
Offline
|
não tem como vc não usar ifs, se vc vai fazer uma comparação simples tem que usar if, agora se vc vai fazer 300 comparações dentro de um laço então o bom senso diz que vc tem que usar
um switch case, até para facilitar a legibilidade do código. existem alguns compiladores que otimizam o código gerado , não sei se é o caso do java.
sds
j.silvestre
|
rapadura is sweet, but no soft.
8051 and ARM embedded system developer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 16:25:06
|
danielpump
Debugger
Membro desde: 03/04/2011 00:58:33
Mensagens: 54
Offline
|
eu entendi +/-....mas acho que tem coisa que só fazendo mesmo, para conseguiur entender, mas sim sempre com bom senso, tbm nõ vamos exagerar imaginando que nunca devemos usar if né...
mas vlw mesmo pela explicação galera, vou ter que testar umas formas de fazer isso, que ainda não consigo imaginar..rsrs
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 16:53:50
|
Vini Fernandes
Virtual Machine Man
![[Avatar]](/images/avatar/84cd1f88d088c3a15254f37a22f6e5d6.jpg)
Membro desde: 20/01/2009 08:43:02
Mensagens: 523
Offline
|
Segue um outo exemplo: imagine que sua loja tenha varios tipos de funcionarios Gerente, Balconista e Faixineiro e o escritorio de contabilidade precise recuperar os valores dos salarios de cada um. Para isso criei 2 metodos
Criei uma classe Funcionario para abstracao desse conceito para que cada uma de suas implementacoes (Gerente, Balconista e Faixineiro) informem um valor salarial. Eh exatamente o ultimo metodo que utiliza o recurso do polimorfismo, pois caso nao existisse a classe abstracta Funcionario a implementacao do ultimo metodo seria impossivel, sendo assim, teriamos que escolher entre a primeira implementacao ou a segunda, isto eh, restariam apenas os IFs.
abrs
This message was edited 2 times. Last update was at 29/07/2011 17:12:24
|
What do you know about Java? Help me! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 19:11:28
|
OliveirakunJava
Java Ninja
![[Avatar]](/images/avatar/d4cb74874cebc08e5b8001772876a9ae.jpg)
Membro desde: 29/05/2008 20:50:47
Mensagens: 279
Localização: Diadema - SP
Offline
|
j.silvestre wrote:não tem como vc não usar ifs, se vc vai fazer uma comparação simples tem que usar if, agora se vc vai fazer 300 comparações dentro de um laço então o bom senso diz que vc tem que usar
um switch case, até para facilitar a legibilidade do código. existem alguns compiladores que otimizam o código gerado , não sei se é o caso do java.
sds
j.silvestre
Tem sim como vc evitar o uso de if's, através do polimorfismo, utilizando alguns design patterns e boas práticas de orientação a objetos. É claro que vc não vai poder fazer isso em todos os casos, mas na maioria pode sim. Existe até um movimento chamado de "campanha anti-if":
http://www.antiifcampaign.com/
E também tem um post no blog da caelum, relacionado ao assunto:
http://blog.caelum.com.br/como-nao-aprender-orientacao-a-objetos-o-excesso-de-ifs/
|
Francis Borges Oliveira
SCJP 6
SCWCD 5
Java no Renkinjutsushi!! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2011 19:51:50
|
danielpump
Debugger
Membro desde: 03/04/2011 00:58:33
Mensagens: 54
Offline
|
Vlw mesmo galera, acho que entendi a idéia do Vini Fernandes é a de não utilizar os IF no código em si, mas numa classe auxiliar, isso é mutio legal, fica muito mais legivel, e aquele post da caelum tbm é excelente,um jeito bem diferente, gostei muito, agora só tenho que dar uma treinada.
VLW msm
PS: No off-topic tbm põe [resolvido]..rsrs
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2011 07:42:10
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Veja um exemplo:
http://www.guj.com.br/java/55885-como-nao-utilizar-if-ou-switch#293436
Movi o tópico para Java Básico. É você mesmo que coloca o tópico como resolvido.
1. Vá ao seu PRIMEIRO post.
2. Clique em editar;
3. Escreva [Resolvido] no início do título;
4. Clique em enviar, e pronto!
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2011 08:07:19
|
danielpump
Debugger
Membro desde: 03/04/2011 00:58:33
Mensagens: 54
Offline
|
vlw viny
mto legal aquele post, explica bem tbm
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2011 09:24:35
|
Rafael Mesquita Moura
JavaTeenager
![[Avatar]](/images/avatar/f4a0e4f02d102bd049806f27690048ac.jpg)
Membro desde: 04/08/2010 15:32:37
Mensagens: 171
Localização: São Paulo
Offline
|
Pessoal, a um tempo atrás eu também estava com essa dúvida, sobre os uso de if´s em um código. O fato é que eu estava trabalhando com um arquivo .txt e nele continha dados separados apenas pelo caracter pipe ( "|" ). Cada linha desse arquivo .txt era um registro, e dentro dessa linha eu tinha que comparar as posições para eliminar, ou acrescentar dados entre os pipes.
Infelizmente, meu código acabou ficando muito feio, por se tratar de um "filtro" e como sou novo na área de programação com Java, fiquei meio sem ter pra onde correr, e o código ainda está com esse monte de if/else, vou postar uma parte do código do filtro para que vocês possam entender melhor o que estou fazendo:
Eu uso um BufferedReader e a linha que eu capturo através deste eu utilizo o método String.split( "|" ) e ele me retorna o array chamado 'campos' com todo o conteúdo da linha separado por vírgulas. E nessa parte do método eu verifico se o primeiro elemento do array 'campos' é igual a "0005", "0100", etc.
E de acordo com o resultado desse if eu filtro os dados de cada registro, inserindo no ArrayList de Strings 'camposFiltrados'. Poderiam me dizer como esse código ficaria mais limpo?
Vlw
|
----------------------------------------------------------------------
Análise e Desenvolvimento de Sistemas
Em busca de conhecimento... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2011 10:35:28
|
André Fonseca
JWizard
![[Avatar]](/images/avatar/286b0b3ea509af1aeff6bb47299d96d7.png)
Membro desde: 23/02/2007 15:52:55
Mensagens: 2034
Offline
|
Rafael,
Crie um outro tópico com a sua dúvida já que este já foi marcado como resolvido
Abs
|
Você é novo no GUJ?
Como fazer perguntas?
www.twitter.com/_afonseca |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2011 19:01:00
|
boone
JWizard
![[Avatar]](/images/avatar/6a5dfac4be1502501489fc0f5a24b667.jpg)
Membro desde: 21/09/2003 16:01:35
Mensagens: 2140
Offline
|
chimufox wrote:Sim, ifs pesam demais no processamento...
Ifs fazem parte do grupo de operações com maior velocidade de processamento, pois podem ser traduzidos diretamente para um respectivo bytecode da JVM ou mesmo do bytecode do processador. Tá certo que dependendo da comparação, pode requerer um pouco mais de esforço (comparações com valores não-nativos ex: Obj ao invés de int).
Dizer que If é mais lento é bobagem. O causador de lentidão tá muito mais ligado a implementação do algoritimo.
Já ví códigos For...Next com Ifs internos desnecessários que poderiam ter sido executados fora do loop uma única vez !
Já vi código que nem precisava de if. Uma operação matémática resolvia a situação.
Polimorfismo é daqueles assuntos que vc aprenderá mais com revistas e estudando por conta do que achar que vai sair craque disto na facul. Lá vc vai aprender que isto existe, mas para aprender mesmo vc vai ter que procurar fora de lá.
|
|
|
 |
|
|