Usar try ou if?

Boa noite senhores e senhoras.
Sou novo em java. e me deparei com a seguinte situaçao. Eu posso substituir um if por um try? Qual a a melhor oção. Segue o codigo abaixo para análise. Obrigado a quem contribuir.

	public boolean verficaCaixa(){
		boolean status;
		try {
			Caixa caixa = this.caixaDao.verificaStatus();
			status = true;
			return status;
		} catch (DAOException e) {
			return status = false;
		}
	}

sem try mas agora com if

	public boolean verficaCaixa(){
		boolean status;
		if (this.caixaDao.verificaStatus() == true{
			status = true;
			return status;
		} else{
			return status = false;
		}
	}

[quote=alwayss2000@hotmail.com]Boa noite senhores e senhoras.
Sou novo em java. e me deparei com a seguinte situaçao. Eu posso substituir um if por um try? Qual a a melhor oção. Segue o codigo abaixo para análise. Obrigado a quem contribuir.

	public boolean verficaCaixa(){
		boolean status;
		try {
			Caixa caixa = this.caixaDao.verificaStatus();
			status = true;
			return status;
		} catch (DAOException e) {
			return status = false;
		}
	}

sem try mas agora com if

public boolean verficaCaixa(){ boolean status; if (this.caixaDao.verificaStatus() == true{ status = true; return status; } else{ return status = false; } } [/quote]

Use o try/cath para tratar uma excessão (ou seja, um evento não esperado, que pode ou não ser tratado)

Use o if para tratar uma condição no código, é uma estrutura de decisão

No seu caso não faz sentido um método que verifica o status lançar uma daoException, quem tem que lançar isso é um metodo do DAO

PS: já vi gente usar try/catch para tentar retirar if’s do código, fica bem ilegivel isso, tente dar uma procurada no forum pelo pattern Strategy

Vc nunca deve substituir um if por um try, ou virse-versa.
A estrutura de decisão if-else é para uma ocasiões corretas, e o try-cacth é apenas para tratamento de exceções.

Não tente trocar as funcionalidades de cada.

Boa sorte.

[quote=alwayss2000@hotmail.com]Boa noite senhores e senhoras.
Sou novo em java. e me deparei com a seguinte situaçao. Eu posso substituir um if por um try? Qual a a melhor oção. Segue o codigo abaixo para análise. Obrigado a quem contribuir.

	public boolean verficaCaixa(){
		boolean status;
		try {
			Caixa caixa = this.caixaDao.verificaStatus();
			status = true;
			return status;
		} catch (DAOException e) {
			return status = false;
		}
	}

sem try mas agora com if

public boolean verficaCaixa(){ boolean status; if (this.caixaDao.verificaStatus() == true{ status = true; return status; } else{ return status = false; } } [/quote]

é sempre bom ver gente interessada na qualidade de seus códigos, ja que você se mostrou interessado nisso uma outra dica que te dou, uma coisa que com o tempo vem, só para simplificar, deixar seu código menor e mais simples quanto aos seus ifs por exemplo…

você está acostumado a usar comparações nos seus ifs, na verdade você não precisa, um if veriifca apesar se o resultado do que está dentro dele é verdadeiro, entra no bloco do if caso sim e no else caso não, veja:

if (this.caixaDao.verificaStatus() == true){

é o mesmo que

if (this.caixaDao.verificaStatus() ){

se você quisesse por exemplo comparar se o retorno do método, no caso o status fosse falso, então:

if (this.caixaDao.verificaStatus() == false){

poderia ser substituido por:

if ( ! this.caixaDao.verificaStatus() ){

por que está negando aquele valor, então só vai entrar no if caso o resultado seja falso, percebe? é mais simples e mais facil… agora veja só:

	public boolean verficaCaixa(){
		boolean status;
		if (this.caixaDao.verificaStatus() == true{
			status = true;
			return status;
		} else{
			return status = false;
		}
	}

poderia ser substituido por

	public boolean verficaCaixa(){
		return this.caixaDao.verificaStatus();
	}

isso é claro por que além de armazenar o resultado em uma váriável local (que nem é usada para algo além de ser retornada) a única coisa que você faz é retornar o resultado do método…

uma das coisas que vejo os programadores mais experientes que conheço considerar, é que o código feito seja simples, de fácil compreensão e de preferência curto (além de algumas outras coisas relacionadas a OO e a padrões de projetos, que também levam bastante em consideração a simplicidade).

continue com esse pensamento em se preocupar com a qualidade do seu código :wink:

[quote=maior_abandonado][quote=alwayss2000@hotmail.com]Boa noite senhores e senhoras.
Sou novo em java. e me deparei com a seguinte situaçao. Eu posso substituir um if por um try? Qual a a melhor oção. Segue o codigo abaixo para análise. Obrigado a quem contribuir.

	public boolean verficaCaixa(){
		boolean status;
		try {
			Caixa caixa = this.caixaDao.verificaStatus();
			status = true;
			return status;
		} catch (DAOException e) {
			return status = false;
		}
	}

sem try mas agora com if

public boolean verficaCaixa(){ boolean status; if (this.caixaDao.verificaStatus() == true{ status = true; return status; } else{ return status = false; } } [/quote]

é sempre bom ver gente interessada na qualidade de seus códigos, ja que você se mostrou interessado nisso uma outra dica que te dou, uma coisa que com o tempo vem, só para simplificar, deixar seu código menor e mais simples quanto aos seus ifs por exemplo…

você está acostumado a usar comparações nos seus ifs, na verdade você não precisa, um if veriifca apesar se o resultado do que está dentro dele é verdadeiro, entra no bloco do if caso sim e no else caso não, veja:

if (this.caixaDao.verificaStatus() == true){

é o mesmo que

if (this.caixaDao.verificaStatus() ){

se você quisesse por exemplo comparar se o retorno do método, no caso o status fosse falso, então:

if (this.caixaDao.verificaStatus() == false){

poderia ser substituido por:

if ( ! this.caixaDao.verificaStatus() ){

por que está negando aquele valor, então só vai entrar no if caso o resultado seja falso, percebe? é mais simples e mais facil… agora veja só:

	public boolean verficaCaixa(){
		boolean status;
		if (this.caixaDao.verificaStatus() == true{
			status = true;
			return status;
		} else{
			return status = false;
		}
	}

poderia ser substituido por

	public boolean verficaCaixa(){
		return this.caixaDao.verificaStatus();
	}

isso é claro por que além de armazenar o resultado em uma váriável local (que nem é usada para algo além de ser retornada) a única coisa que você faz é retornar o resultado do método…

uma das coisas que vejo os programadores mais experientes que conheço considerar, é que o código feito seja simples, de fácil compreensão e de preferência curto (além de algumas outras coisas relacionadas a OO e a padrões de projetos, que também levam bastante em consideração a simplicidade).

continue com esse pensamento em se preocupar com a qualidade do seu código ;)[/quote]

Na verdade isso é um pouco relativo.

Quando você usa um método chamado “verify” normalmente está esperando que ele gere uma determinada exceção:

http://docs.oracle.com/javase/1.5.0/docs/api/java/security/cert/Certificate.html#verify(java.security.PublicKey)

e você tem de estar preparado para tratá-las.

Você, no entanto, poderia simplesmente ter um código de retorno (e usar “if” ou “switch” para tratar o retorno), embora isso pareça mais com C, não com Java, e isso dê margem a muitos bugs que não ocorreriam se você tratasse corretamente as exceções.

acho que try/catch não se usa em regras de negócio…

quando você faz um código que precisa de um recurso externo…webservices, GET, POST, arquivos, sockets, conversões complexas, conexão com o BD, qualquer coisa que dependa de um recurso, trabalhe com algo que seja instavel.

e if você usa para tomar decisões apenas lógicas…e que mesmo de true ou false, os 2 são valores realmente esperados, e seu programa não irá parar de funcionar por causa disso…

eu uso assim…espero que esteja correto.