Código rápido e claro?

2 respostas
J
E ae bl? no enum seguinte:
public enum TPCampo {
    INTEIRO,
    TEXTO,
    MOEDA,
    LÓGICO;
    
    /**
     * Verifica se um dado valor é válido para o tipo atual.
     * Valores vazios ou nulos e tipos inexistentes 
     * são sempre válidos.
     * @param valor
     * @return
     */
    public static boolean isValido(String valor, String tipo) {
        /*codigo do metodo*/
    }

    private static boolean isInteiroValido(String valor) {
        /*codigo do metodo*/
    }
    private static boolean isLogicoValido(String valor) {
        /*codigo do metodo*/
    }
    private static boolean isMoedaValido(String valor) {
        /*codigo do metodo*/
    }
}
o método isValido() verifica a validação dos campos dependendo do tipo do campo por enquanto ele está assim:
public static boolean isValido(String valor, String tipo) {
        if (valor != null && !valor.trim().equals("")) {
            
            if (INTEIRO.equals( TPCampo.valueOf(tipo) ) ) {
                
                return isInteiroValido(valor);
            }else if (MOEDA.equals( TPCampo.valueOf(tipo) ) ) {
                
                return isMoedaValido(valor);
            }else if (LÓGICO.equals( TPCampo.valueOf(tipo) ) ) {
                
                return isLogicoValido(valor);
            }
        }
        return true;
    }
mas pra mim ele parece lendo por causa dos vários TPCampo.valueOf(tipo), e não tão claro, eu leio as instruções assim: "se tipo do campo é igual ao tipo INTEIRO,MOEDA,LOGICO então", mas se reparar a instrução if estão na ordem inversa, preciso ler a instrução de traz pra frente para ler dessa maneira por isso pensei em fazer da seguinte maneira:
public static boolean isValido(String valor, String tipo) {
        if (valor != null && !valor.trim().equals("")) {
            
            TPCampo tipoCampo = TPCampo.valueOf(tipo);
            
            if (tipoCampo.equals(INTEIRO) ) {
                
                return isInteiroValido(valor);
            }else if (tipoCampo.equals(MOEDA) ) {
                
                return isMoedaValido(valor);
            }else if (tipoCampo.equals(LÓGICO) ) {
                
                return isLogicoValido(valor);
            }
        }
        return true;
    }
assim pra mim fica mais claro (se tipoCampo = INTEIRO) e rápido (apenas um valueOf() ) mas poderia dar um NullPointerException se o tipo passado fosse nulo certo? então para ficar um pouco mais claro e rápido e ainda evitar a ecessão poderia ficar da seguinte forma:
public static boolean isValido(String valor, String tipo) {
        if (valor != null && !valor.trim().equals("")) {
                        
            TPCampo tipoCampo = TPCampo.valueOf(tipo);
            if (INTEIRO.equals( tipoCampo ) ) {
                
                return isInteiroValido(valor);
            }else if (MOEDA.equals( tipoCampo ) ) {
                
                return isMoedaValido(valor);
            }else if (LÓGICO.equals( tipoCampo ) ) {
                
                return isLogicoValido(valor);
            }
        }
        return true;
    }
o que os nobres colegas acham? :lol:

2 Respostas

J

Tá meio gambiarra isso, não seria melhor assim?

public enum TipoCampo{
   INTEIRO{
      public boolean isValido(String valor){
         //validação
         return true;
      }
   };
   TEXTO{
      public boolean isValido(String valor){
        //validação
        return true;
      }
   };

   public abstract boolean isValido(String valor);
}
TipoCampo tipo = TipoCampo.INTEIRO;
if(tipo.isValido("10")){
    System.out.println("ok");
}

TipoCampo tipo2 = TipoCampo.TEXTO;
if(tipo.isValido("blablabla")){
   System.out.println("ok");
}
J
"jairelton":
Tá meio gambiarra isso, não seria melhor assim?
public enum TipoCampo{
   INTEIRO{
      public boolean isValido(String valor){
         //validação
         return true;
      }
   };
   TEXTO{
      public boolean isValido(String valor){
        //validação
        return true;
      }
   };

   public abstract boolean isValido(String valor);
}
TipoCampo tipo = TipoCampo.INTEIRO;
if(tipo.isValido("10")){
    System.out.println("ok");
}

TipoCampo tipo2 = TipoCampo.TEXTO;
if(tipo.isValido("blablabla")){
   System.out.println("ok");
}

muito bem colocado eu não havia pensado nisso.
obrigado, um abraço!

Criado 31 de outubro de 2006
Ultima resposta 31 de out. de 2006
Respostas 2
Participantes 2