Evitando if de == null

9 respostas
C

Já pensei em usar strategy, mas acho que seria o caso,
Alguma sugestão de como remover esse monte de ifs do meu código?

public Edge(Character v1, Character v2) {
		super();
		this.incoming = v1;
		this.outComing = v2;
		this.weight = 0;

		if (v1 == null && v1 == null)
			this.id = null;
		else if (v1 == null && v2 != null)
			this.id = v2.toString();
		else if (v2 == null && v1 != null)
			this.id = v1.toString();
		else
			this.id = v1 + "-" + v2;

	}

9 Respostas

Jemerson

crolip,
Acabo de ler um artigo muito interessante sobre as condicionais e por coincidência trata-se do padrão strategy.
O artigo trata do seguinte: “IF BOM É IF MORTO”
Ele mostra uma maneira prática de utilização do padrão strategy que pode eliminar o uso de if negociável.Para
entender melhor, dê uma lida neste link: http://marconems.blogspot.com/search/label/GoF%20Strategy

Desculpe por não poder ajudar muito,mas se você descobrir algo a mais, posta para a galera.
Abraços

ViniGodoy

Nesse caso eu deixaria assim mesmo.

E

assim como o viny, eu também deixaria os ifs, entretanto, como são vários "if's" encadeados, deixaria primeiro os que tem maior chance de acontecer. Vamos supor que seria 80% de chance de nenhum deles ser null, eu inverteria a ordem deles para algo assim:

public Edge(Character v1, Character v2) {  
        super();  
        this.incoming = v1;  
        this.outComing = v2;  
        this.weight = 0;  
  
        if (v1 != null && v1 != null)  
            this.id = v1 + "-" + v2;  
        else if (v1 == null && v2 != null)  
            this.id = v2.toString();  
        else if (v2 == null && v1 != null)  
            this.id = v1.toString();  
        else  
            this.id = null;
  
}
R

é de fato eu gosto do if. ele é bem prático

e não é um monte de if , isto aí para o computador não é nada nada, mesmo uns 100 ifs, ele analisa rapidinho.
assim eu penso, claro pode haver uma forma melhor no caso de tantos ifs, mas aí não são muitos não.

maior_abandonado
crolip:
Já pensei em usar strategy, mas acho que seria o caso, Alguma sugestão de como remover esse monte de ifs do meu código?
public Edge(Character v1, Character v2) {
		super();
		this.incoming = v1;
		this.outComing = v2;
		this.weight = 0;

		if (v1 == null && v1 == null)
			this.id = null;
		else if (v1 == null && v2 != null)
			this.id = v2.toString();
		else if (v2 == null && v1 != null)
			this.id = v1.toString();
		else
			this.id = v1 + "-" + v2;

	}

a unica coisa que imagino que você possa fazer seria você separar um método só para este if em algum Utils seu e chamar ele onde for o caso. Por exemplo:

public String seuMetodoAuxiliar(Object v1, Object v2){

                if (v1 == null && v1 == null)
			return null;
		else if (v1 == null && v2 != null)
			return v2.toString();
		else if (v2 == null && v1 != null)
			return v1.toString();
		else
			return v1 + "-" + v2;


}
pmlm

Simplificando um pouco mais...

public String seuMetodoAuxiliar(Object v1, Object v2){

    if (v1 == null && v2 == null)
        return null;

    //Dado que tem o return não precisa dos else
    if (v1 == null)  // Não precisa da segunda condição, já que se não obedece à condição acima e v1 é null, v2 não poderá nunca ser null
        return v2.toString();
	
    if (v2 == null)  // Mesmo que o anterior
        return v1.toString();

    return v1 + "-" + v2;


}
Giulliano

Jemerson:
crolip,
Acabo de ler um artigo muito interessante sobre as condicionais e por coincidência trata-se do padrão strategy.
O artigo trata do seguinte: “IF BOM É IF MORTO”
Ele mostra uma maneira prática de utilização do padrão strategy que pode eliminar o uso de if negociável.Para
entender melhor, dê uma lida neste link: http://marconems.blogspot.com/search/label/GoF%20Strategy

Desculpe por não poder ajudar muito,mas se você descobrir algo a mais, posta para a galera.
Abraços

Jemerson o artigo aborda o padrão “strategy”,e eu acho interessante conhecer padrões. Mas não se atenha ao resto do artigo sobre “if”. Não fique tentando evitar IFs, isto não faz o menor sentido.

aix

Giulliano:

Jemerson o artigo aborda o padrão “strategy”,e eu acho interessante conhecer padrões. Mas não se atenha ao resto do artigo sobre “if”. Não fique tentando evitar IFs, isto não faz o menor sentido…

concordo com você, se fosse o caso de criação de objetos ai sim, mas não desta forma, se fosse o caso de criação de objetos poderia se criar uma factory.

Jemerson

Giulliano,aix,
Obrigado pela dica.
Vou ficar atento nesses tuturiais que estão espalhados na internet.

Criado 3 de dezembro de 2011
Ultima resposta 5 de dez. de 2011
Respostas 9
Participantes 9