Para mim parece ser algo relacionada ao cúmulo da preguiça. O camarada sabe que o certo é que aquele bloco de código somente seja executado quando uma dada condiçào for verdadeira. O problema é que por enquanto o cara não sabe que condição é essa. Logo, ele já deixa o if ali, “no jeito”. Quando ele descobrir o que falta lá, é só “preencher”. Afinal, provavelmente eles escreve classes gigantescas, com métodos de centenas de linhas e, caso não deixe o if pronto ali, vai ser um problema lembrar onde o mesmo deveria ser colocado depois…
Achei uma aqui que È SHOOOOOW alguém me diga que que o programador tinha na cabeça?
Exception e = null;
if (rs.next()) {
do {
//Faz o que deve fazer quando tem resultado a query
//...
}
} while (rs.next());
if (teste qualquer com o resultado acima) {
e = new Exception("Erro");
}
}
if (e != null) {
throw e;
}
[quote=jingle]Achei uma aqui que È SHOOOOOW alguém me diga que que o programador tinha na cabeça?
Exception e = null;
if (rs.next()) {
do {
//Faz o que deve fazer quando tem resultado a query
//...
}
} while (rs.next());
if (teste qualquer com o resultado acima) {
e = new Exception("Erro");
}
}
if (e != null) {
throw e;
}
HAUShaushuashua essa foi de mata =][/quote]
O DO-WHILE é fácil de entender: O cara aprendeu a usar o DO-WILE e resolveu aplicar, daí ele pensou: Meu Deus! Mas eu preciso de algum valor inicial do ResultSet, já sei! Vou primeiro dar um if (rs.next)…".
[quote=DaviPiala]Eu achava que não existia um tipo de coisa assim, mas na empresa pra qual eu presto serviço é possivel!
if ( 1 == 1)
{
//Favor não retirar este if
}
[/quote]
Cara já vi esse tipo de situação, um pouco diferente usando uma function
validarValor()
{
//Favor não retirar este if, pelo amor de Deus, acredite, hehe.
}
E por pior que pareça não pode ser removido.
A situação em que eu encontrei foi em um jsp, em um codigo javascript, tinha um certo reaproveitamento, onde esse método era invocado por um formulario filho, o que acontecia era que esse método era inutil dependendo do pai, mas teria que existir para não dar erro de javascript.
[quote=vanzella][quote=DaviPiala]Eu achava que não existia um tipo de coisa assim, mas na empresa pra qual eu presto serviço é possivel!
if ( 1 == 1)
{
//Favor não retirar este if
}
[/quote]
Cara já vi esse tipo de situação, e por pior que pareça não pode ser removido.
A situação em que eu encontrei foi em um jsp, em um codigo javascript, tinha um certo reaproveitamento, onde esse método era invocado por um formulario filho, o que acontecia era que esse método era inutil, mas teria que existir para não dar erro de javascript.
[/quote]
Isso também já aconteceu comigo.
O javascript é possuido por forças ocultas além da nossa imaginação. :lol:
Esse “if (1 == 1) { … }” equivale semanticamente a:
“{ … }” (e o compilador sabe muito bem que “1 == 1”; se não for o javac, que é extremamente burro (nem sei se ele faz corretamente constant folding ou eliminação de “if (false)”), pelo menos o just-in-time compiler do Java vai saber disso na hora de executar o programa.
Digamos que alguém declare alguma variável local dentro dessas chaves, ou então ela tenha um label. Nessas condições você não pode simplesmente remover o “if” E as chaves; mas você pode remover o if, ou seja, você poderia deixar como
[quote=thingol]Esse “if (1 == 1) { … }” equivale semanticamente a:
“{ … }” (e o compilador sabe muito bem que “1 == 1”; se não for o javac, que é extremamente burro (nem sei se ele faz corretamente constant folding ou eliminação de “if (false)”), pelo menos o just-in-time compiler do Java vai saber disso na hora de executar o programa.
Digamos que alguém declare alguma variável local dentro dessas chaves, ou então ela tenha um label. Nessas condições você não pode simplesmente remover o “if” E as chaves; mas você pode remover o if, ou seja, você poderia deixar como
[code]begin
…
– limpando registros anteriores
delete tm_gps
where cod_grupo = p_cod_grupo
and cod_empresa = p_cod_empresa
and data_ref_gps = v_data_fim;
-- gravando os registros apurados para codigos diferentes de 2100
open c_notas;
fetch c_notas into v_notas;
while c_notas %found loop
if v_notas.cod_retencao_ret = '2100' then
v_vlr_imposto := v_vlr_imposto + v_notas.vr_imposto;
v_vlr_basecalc := v_vlr_basecalc + v_notas.basecalculo;
else
if v_notas.vr_imposto > 29 then
begin
...
exception
when dup_val_on_index then
update tm_gps
set valor_inss_gps = v_notas.vr_imposto,
base_calc_gps = v_notas.basecalculo,
data_venc_gps = v_data_venc,
cod_cei = v_notas.cod_cei
where cod_grupo = v_notas.cod_grupo
and cod_empresa = v_notas.cod_empresa
and cnpj_fornecedor = v_notas.cnpj_ret
and cod_retencao = v_notas.cod_retencao_ret
and data_ref_gps = v_data_fim;
commit;
end;
end if;
end if;
fetch c_notas into v_notas;
end loop;
close c_notas;
private boolean validarCaracteresNumeroLogico(String numero) {
String charValidos = "ABCDEFGHIJKLMNOPQRSTUVXZWY0123456789";
for (int i = 0; i < numero.length(); i++) {
if (charValidos.indexOf(numero.substring(i, i + 1)) < 0) {
return false;
}
}
return true;
}
Ai resolvi fazer um teste para averiguar o tempo de execução deste código e de maneiras mais eficazes de se fazer a mesma coisa. Olha que diferença faz você escrever bem um código:
[code]package teste;
public class Teste {
public static void main(String[] args) {
Teste t = new Teste();
String num = "";
final int size = 1000;
long t0 = System.currentTimeMillis();
for(int i=0; i<size; i++) {
num += i;
t.validarCaracteresNumeroLogico(num);
}
long t1 = System.currentTimeMillis();
num = "";
for(int i=0; i><size; i++) {
num += i;
t.validarCaracteresNumeroLogico2(num);
}
long t2 = System.currentTimeMillis();
num = "";
for(int i=0; i><size; i++) {
num += i;
t.validarCaracteresNumeroLogico3(num);
}
long t3 = System.currentTimeMillis();
System.out.println("T1: " + (t1-t0));
System.out.println("T2: " + (t2-t1));
System.out.println("T3: " + (t3-t2));
}
private boolean validarCaracteresNumeroLogico(String numero) {
String charValidos = "ABCDEFGHIJKLMNOPQRSTUVXZWY0123456789";
for (int i = 0; i >< numero.length(); i++) {
if (charValidos.indexOf(numero.substring(i, i + 1)) < 0) {
return false;
}
}
return true;
}
private boolean validarCaracteresNumeroLogico2(String numero) {
String charValidos = "ABCDEFGHIJKLMNOPQRSTUVXZWY0123456789";
for (int i = 0; i < numero.length(); i++) {
if (charValidos.indexOf(numero.charAt(i)) < 0) {
return false;
}
}
return true;
}
private boolean validarCaracteresNumeroLogico3(String numero) {
return numero.matches("[A-Z0-9]+");
}
}[/code]
Resultado:
[quote]T1: 266
T2: 172
T3: 156[/quote]
Ou seja, a solução 3 rodou em quase metade do tempo da solução 1 (ruim). Só o fato de ter mudado um método na solução 2 ajudou a cair e muito o tempo de processamento com relação à solução 1.