EVGD: Códigos Toscos

O estagiário não entendia porque os valores eram substituidos ou não estavam como ele esperava.

[code]for (int desc = 0; desc < 30; desc++) {
if (rmiau03.getCodCaracteristica().get(desc) != 0L) {

List<Long> listaLong = new ArrayList<Long>();
for (int j = 0; j < 30; j++) {
  listaLong.add(0L);
}

pesquisa.setTbCodCaracteristica(listaLong);
pesquisa.setTbCodValorCaracteristica(listaLong);

pesquisa.getTbCodCaracteristica().add(desc, rmiau03.getCodCaracteristica().get(desc));
pesquisa.getTbCodValorCaracteristica().add(desc, rmiau03.getCodValorCarac().get(desc));

}
tabs.add( pesquisa );
}
/* todos direitos reservados */[/code]

Descobri o porquê. Código certo abaixo:

[code]pesquisa.setTbCodCaracteristica(new ArrayList());
pesquisa.setTbCodValorCaracteristica(new ArrayList());
for (int j = 0; j < 30; j++) {
pesquisa.getTbCodCaracteristica().add(0L);
pesquisa.getTbCodValorCaracteristica().add(0L);
}

for (int desc = 0; desc < 30; desc++) {
if (rmiau03.getCodCaracteristica().get(desc) != 0L) {
pesquisa.getTbCodCaracteristica().add(desc, rmiau03.getCodCaracteristica().get(desc));
pesquisa.getTbCodValorCaracteristica().add(desc, rmiau03.getCodValorCarac().get(desc));
}
}
/* todos direitos reservados */[/code]

O pior é que ele achava que no set ele colocaria duas listas diferentes nos atributos, como se fosse uma cópia ou clone. hehehehehe…

[code]int size = 0;

if( codigo == 7L ) {
lista.add( 9L );
} else {
lista.add( codigo );
}

for( … ) {
if( alguma condiçao especial ) {
lista.add( valorQueVeioDeAlgumLugar );
size++;
}
}

//retorna o tamanho da lista
return size;[/code]

Será que ele já ouviu falar de lista.size() ??? Fora que ele esqueceu de fazer um size++ logo no início (if/else).

[quote=plentz][quote=Thiagosc][quote=giulianocosta]hhehehe…

Essa é classica:

if(isAlgumaCoisa == true){
//sfkljsdklfjklsdfkl
}[/quote]

Acho que isso se encaixa mais no “estilo de código” do que código burro. O “true” é desnecesssário mas não faz mal algum.

Seria o mesmo que implicar com indentação do código de alguém ou algo parecido, tipo o indivídio que usa tab tirando uma onda de quem usa espaço, e o que usa a formatação automática da IDE tirando sarro dos dois.[/quote]

Eu ainda não vi ninguém que achasse melhor usar “== true”. Sempre era falta de conhecimento.[/quote]

Eu já vi sim!
O arquiteto do projeto garantiu que quando houvesse manutenção no código seria mais fácil o entendimento.
Mas o motivo real era quando alguém fosse ler e entender de cara o que se esperava.
Encontrar true ou false. Deixando-os explícitos.
E tive que trocar todos meus códigos por == true ou != false.

At++

[quote=danieldestro]... for( ... ) ...[/quote]

O foreach deve ser ensinado DEPOIS do for normal. :lol:

Neste caso, não seria melhor usar new ArrayList<Long>(60) ?

poderia, mas de qualquer forma ele prrcisava cria uma lista de 30 posicoes com valores zero.

Masterpiece / Obra-prima:

[code]public static Timestamp obterTimestampPorDataDDMMYYYY(String stData) {
SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
String strDate;
Timestamp dataTimestamp;

try {
    if (new SimpleDateFormat("dd/MM/yyyy").format(sdf.parse(stData)).equals(stData)) {
        strDate = new SimpleDateFormat("dd-MM-yyyy 00:00:00").format(sdf.parse(stData));
        dataTimestamp = new Timestamp(new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse(strDate).getTime());
    } else {
        dataTimestamp = null;
    }

} catch (ParseException e) {
    dataTimestamp = null;
} catch (Exception e) {
    dataTimestamp = null;
}

return dataTimestamp;

}[/code]

[quote=danieldestro]Masterpiece / Obra-prima:

[code]public static Timestamp obterTimestampPorDataDDMMYYYY(String stData) {
SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
String strDate;
Timestamp dataTimestamp;

try {
    if (new SimpleDateFormat("dd/MM/yyyy").format(sdf.parse(stData)).equals(stData)) {
        strDate = new SimpleDateFormat("dd-MM-yyyy 00:00:00").format(sdf.parse(stData));
        dataTimestamp = new Timestamp(new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse(strDate).getTime());
    } else {
        dataTimestamp = null;
    }

} catch (ParseException e) {
    dataTimestamp = null;
} catch (Exception e) {
    dataTimestamp = null;
}

return dataTimestamp;

}[/code][/quote]

Só faltou colocar o catch (Throwable e).

Imagino como é a “sobrecarga” desse método, obterTimestampPorDataDDMMYYYYHHMMSS, obterTimestampPorDataYYYYMMDD, obterTimestampPorDataYYYYMMDDHHMMSS,
obterDatePorDataDDMMYYYY…

O IF deste método foi SENSACIONAL!

O que o cara que fez isso tava fumando?

Esse select SQL não me cheira muito bem:

SELECT * FROM UMA_TABELA O WHERE O.CD_DOCTO=?1 AND ROWNUM<=1 ORDER BY O.DT_INICO_VIGEN_DOCTO DESC

Acredito que seria melhor usar um MAX na data.

ps: Roda o ORACLE.

[quote=danieldestro]Esse select SQL não me cheira muito bem:

SELECT * FROM UMA_TABELA O WHERE O.CD_DOCTO=?1 AND ROWNUM<=1 ORDER BY O.DT_INICO_VIGEN_DOCTO DESC

Acredito que seria melhor usar um MAX na data.

ps: Roda o ORACLE.[/quote]

Bem, você tem que admitir que isso é melhor do que iterar todo o ResultSet para pegar apenas a última tupla. :lol:

Na verdade o problema não é o rownum <= 1. as vezes precisamos fazer isso em algum momento. Essa query não vai fazer o que ele provavelmente tem a intenção de fazer.

O order by ordena o resultado da query final, já que a query só retorna um registro não tem sentido em ordená-la.

Se faz muita confusão nesse sentido. A seguir um link legal sobre isso:

http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html

[quote=Ssalgado]Na verdade o problema não é o rownum <= 1. as vezes precisamos fazer isso em algum momento. Essa query não vai fazer o que ele provavelmente tem a intenção de fazer.
O order by ordena o resultado da query final, já que a query só retorna um registro não tem sentido em ordená-la.[/quote]

Exatamente!

victorwss, o Ssalgado tem razão. Por isso coloquei a query aqui.

[quote=danieldestro][quote=Ssalgado]Na verdade o problema não é o rownum <= 1. as vezes precisamos fazer isso em algum momento. Essa query não vai fazer o que ele provavelmente tem a intenção de fazer.
O order by ordena o resultado da query final, já que a query só retorna um registro não tem sentido em ordená-la.[/quote]

Exatamente!

victorwss, o Ssalgado tem razão. Por isso coloquei a query aqui.[/quote]

Realmente, nem prestei atenção direito nisso. :smiley:

E por falar em if, peguei alguns assim num código:

if (a == b) { ...... ...... } else { //faz nada }
Um else com um comentário “faz nada”… muito bom :smiley:

hahahaah… deve ser daquele tipo de programador: “vai que um dia o programa precisa tratar a outra condição, ele já estará preparado”. kkkkk

Tem um proejto aqui que fui analisá-lo e vi que tinha um monte de DAOs vazios. Perguntei o porque e o cara respondeu: “Se um dia precisar criar as queries, já existe a classe”…

hahahahahahhahahaha

Quando se cria classes utilitárias, o legal seria não colocar um construtor público e deixar apenas métodos estáticos, vide a classe java.lang.Math.

Porém, quando você oferece isso ao programado, e ele não tem a menor idéia de como usar esta classe, ele faz algo assim:

DateUtil du = null; Date umaData = du.parse( umaDataString ); Date proximoDiaUtil = du.proximoDiaUtil( umaData );

Vamos corrigir o código e deixá-lo mais “bunitinhu”:

Date umaData = DateUtil.parse( umaDataString ); Date proximoDiaUtil = DateUtil.proximoDiaUtil( umaData );

DateUtil du = null;   
Date umaData = du.parse( umaDataString );   

mas isto da NullPointer…

[quote=luistiagos] DateUtil du = null; Date umaData = du.parse( umaDataString );

mas isto da NullPointer…[/quote]

Não se o método parse for estático.