EVGD: Códigos Toscos

Não vou colocar o código, pois é meio grande, confuso e eu poderia ser plotado :lol:

Resumidamente, é isso:
Há um TreeMap <String, ArrayList>. A cada iteração de um for, os ArrayList dos for são preenchidos com inteiros e, no final, há uma comparação.

Detalhes:
1- Não se usa supertipos; ok
2- Nem generics; ok
3- Não há motivo algum para o Map ser ordenado.
4- O pior de tudo: no final das contas, daria no mesmo jogar tudo num List só.

Esta é uma de javascript.

no Javascript o objeto Date tem o metodo getMonth que retorna o mes atual, porém este retorna o mes começando do “0” então o sujeito para contornar isto teve a brilhante ideia :smiley:

// O getMonth do JavaScript retorna o mes errado.
function getMes(){
         var month  = new Date().getMonth();

         var meses = new Array();
         meses.push( 1  )
         meses.push( 2  )
         meses.push( 3  )
         meses.push( 4  )
         meses.push( 5  )
         meses.push( 6  )
         meses.push( 7  )
         meses.push( 8  )
         meses.push( 9  )
         meses.push( 10 )
         meses.push( 11 )
         meses.push( 10 )

         return meses[ month ];
}

Alguém me explica o que o cara que escreveu este método estava pensando?!?!?!?

[code]
public static double round(double arg, int n) {
int ceilOrFloor = 0;
if(n < 0){
ceilOrFloor = 1;
}
double arredondado = arg;
arredondado *= (Math.pow(10, n));
if (ceilOrFloor == 0) {
arredondado = Math.ceil(arredondado);
} else {
arredondado = Math.floor(arredondado);
}
arredondado /= (Math.pow(10, n));

    DecimalFormat format = new DecimalFormat("#,##0.0000#");
    String str = format.format(arredondado);
    str = str.replace(',', '.');
    arredondado = Double.parseDouble(str);
    
    return arredondado;
}[/code]

O que aquele trecho com o DecimalFormat faz ali???

Eu substituiria o método acima pelo trecho abaixo:

double n = Math.pow(10,3); double b = Math.round( a*n ) / n;

Salvo engano se alguma regra bem específica determina que, se n for negativo, tem que fazer floor em vez de ceil, mas pleo uso no programa, me parece que não é o caso.

ps: Com n negativo não funciona. Erro na potência. Precisa colocar o absoluto de n.

Que Deus o abençoe!

Olhem o código:

Date dtAtual = new Date( new HDate(dtFormat.format( new Date(System.currentTimeMillis()) )).getTime() );

Análise semântica do que o cara fez:

Pega os milissegundos da hora atual do sistema
Cria um objeto Date para aquela hora
Formata o Date para String
Cria um HDate, que é uma extensão de Date, recebendo como argumento a data no formato String
Pega os milissegundos do HDate criado
Cria um Date com aqueles milissegundos

Traduzindo:

Date dtAtual = new Date();

Ele só queria fazer isto!

Candidato ao campeão mundial da tosquice.

O cara que fez isso deve ser programador VB.

form.setCodigo(new Long(0 + request.getParameter("codigo")));

Ele deve achar que em Java ?somar? Zero com String dá um inteiro, igual no VB.

Olha o tratamento de erro (catch e finally):

public Long obterProximoCodigo(String cod) { Long codigo = null; GeraCodigo registro; try { registro = dao.consultarPorCodigo(cod); codigo = registro.getNrPrxmo() + 1; registro.setNrPrxmo(codigo); bp.update(registro); } catch(RuntimeException e) { throw new BusinessException("erro.gera.codigo"); } finally { return codigo; } }

Fora que isso me cheira a problemas com concorrência.


public metodo() throws Exception {
 try{

      try{
             //codigo que lança IOException
          } catch(IOException e) {
              thow new IOException(e);
          } finally {

          }
   }catch(IOException e) {
      throw new IOException(e);
   } finally {
      
   }

 } 
}

Me digam… o que um cara desses tem na cabeça?

Errar é uma coisa. Cometer assassinatos na programação é outra.

Parabéns ao OCP* que escreveu este SQL:

select r.* from ( select * from TABELA o where 1=1 and o.COD >= ? and (to_date(o.DATA_INI, 'DD/MM/YYYY') <= to_date(sysdate,'DD/MM/YYYY')) and (to_date(o.DATA_FIM, 'DD/MM/YYYY') >= to_date(sysdate, 'DD/MM/YYYY')) order by o.COD desc ) r where rownum < 451

O mais legal é ele converter campos do tipo date e sysdate para DATE.
Além do que ele dá um order by de uma coluna que ele está informando o valor.
Fora o subselect só para pegar os primeiros 450 registros.

  • OCP = Oracle Certified Professional

Reparem a identação! Lindo não?

http://www.guj.com.br/posts/list/81711.java

[quote=davidbuzatto]Reparem a identação! Lindo não?

http://www.guj.com.br/posts/list/81711.java[/quote]

mas acho que isso foi “problema” do editor daqui do guj

[quote=Leozin][quote=davidbuzatto]Reparem a identação! Lindo não?

http://www.guj.com.br/posts/list/81711.java[/quote]

mas acho que isso foi “problema” do editor daqui do guj[/quote]

Eu queria acreditar nisso… Leia os posts :smiley:

[quote=davidbuzatto][quote=Leozin][quote=davidbuzatto]Reparem a identação! Lindo não?

http://www.guj.com.br/posts/list/81711.java[/quote]

mas acho que isso foi “problema” do editor daqui do guj[/quote]

Eu queria acreditar nisso… Leia os posts :D[/quote]

PODE CRE HEIUAOHEUHAIEHHEUA

agora que ví :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: mal ae EHUOIAEA

Na faculdade, uma colega minha escreveu:

for i := 1 to 0 do begin ... end;

hehe… imagino o i, saindo todo empolgado para fazer o loop e… caploft!

Não, ela não pensou em usar downto. Era apenas uma inrolação em um trabalho de faculdade, para dizer que “fez” algo no caderno…

Será que isso funciona?
Testes? Para que testes?

public class AlgumEJB { public List<Pessoa> buscaPorNome(String nome) { // usando JPA retorna uma lista de pessoas } }

Vector pessoas = (Vector) ejb.buscaPorNome( parteDoNome ); for( int i=0; i<pessoas.size(); i++ ) { String nome = (String) ((Vector)pessoas.get(i)).get(0); String idade = (String) ((Vector)pessoas.get(i)).get(i); }

Posso citar eu mesmo?:


public void addIndicador(Indicador ind)
	{
		this.addIndicador(ind);
	}	

Porque sera que esta lançando isso:

java.lang.StackOverflowError

Essa horario de verao influencia mesmo hein…

Este estilo de código costumo escrever em C++ porque:

  • Ele não tem o “labeled loop”
  • Usar “try/catch” até funciona em C++, mas a maior parte das APIs não lança exceções e sou obrigado a ficar checando o valor de retorno.
    Se eu fizesse isto aqui em Java, não pareceria tosco? Acho que todo mundo já viu um “while (true)”, mas poucos já viram um “while (false)”.
do {
    if (!SUCCEEDED (bla()) break;
    ble();
    if (!SUCCEEDED (bli()) break;
    blo();
    blu();
} while (false);

thingol, o código que você colocou está faltando alguns fecha-perentêses.

Mas, é para casos como esse que linguagens como C e C++ usam o goto. :twisted:

Tosquera (má prática):

/** * Método que recebe uma lista com duas entidade e compara o conteudo campo a campo. * @param lista fornece as duas entidade para a comparação sendo que a primeira é a nova e a segunda a atual. * @return String delimitada por ponto e vírgula contendo o nome dos campos que são diferentes entre si. */ public String compararEntidades(List lista) { /* .... */ }

Sugestão:

[code]/**

  • Compara o conteúdo dos atributos dos dois objetos.
  • @param obj1 Objeto a ser comparado.
  • @param obj2 Objeto a ser comparado.
  • @return Array de String contendo os nomes dos atributos diferentes entre si em cada posição do array.
    /
    public String[] compararEntidades(Object obj1, Object obj2) { /
    … */ }[/code]

Já simplifica a vida de quem usa.