EVGD: Códigos Toscos

[quote=victorwss]Incrível função para validar se uma string é numérica:[code]function validanumero(numero) {

var valid = “0123456789”;
var ok = “yes”;
var temp;

for (var i=0; i< numero.length; i++){
temp = “” + numero.substring(i, i+1);

if (valid.indexOf(temp) == "-1")
    ok = "no";

}

if (ok == “no”)
return(false);

return(true);
}[/code][/quote]

Essa foi demais!

Escolhendo botões pra mostrar numa caixa de diálogo (ou “returns” nunca são o suficiente):

[code=java]public class MessageDialogUtils {

public static MessageDialogButton[] buttonsTreatment(

		MessageDialogButton... buttons) {



	MessageDialogButton[] temporaryButtons = buttons;



	int i = 0;



	switch (temporaryButtons[i]) {



	case OK:

		if (i + 1 < temporaryButtons.length) {

			if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.CANCEL) == 0) {

				return new MessageDialogButton[] { MessageDialogButton.OK,

						MessageDialogButton.CANCEL };

			} else {

				return new MessageDialogButton[] { MessageDialogButton.OK };

			}

		} else {

			return new MessageDialogButton[] { MessageDialogButton.OK };

		}



	case YES:

		if (i + 1 < temporaryButtons.length) {

			// botao

			if (temporaryButtons[i + 1].compareTo(MessageDialogButton.NO) == 0) {

				if (i + 2 < temporaryButtons.length) {

					// botao

					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.CANCEL) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.YES,

								MessageDialogButton.NO,

								MessageDialogButton.CANCEL };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}

				} else {

					return new MessageDialogButton[] {

							MessageDialogButton.YES, MessageDialogButton.NO };

				}

			} else if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.CANCEL) == 0) {

				if (i + 2 < temporaryButtons.length) {

					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.NO) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.YES,

								MessageDialogButton.NO,

								MessageDialogButton.CANCEL };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}

				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}

			} else {

				return new MessageDialogButton[] { MessageDialogButton.OK };

			}

		} else {

			return new MessageDialogButton[] { MessageDialogButton.OK };

		}



	case NO:

		if (i + 1 > temporaryButtons.length) {



			if (temporaryButtons[i + 1].compareTo(MessageDialogButton.YES) == 0) {



				if (i + 2 > temporaryButtons.length) {



					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.CANCEL) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.YES,

								MessageDialogButton.NO,

								MessageDialogButton.CANCEL };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}



				} else {

					return new MessageDialogButton[] {

							MessageDialogButton.YES, MessageDialogButton.NO };

				}



			} else if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.CANCEL) == 0) {



				if (i + 2 > temporaryButtons.length) {



					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.YES) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.YES,

								MessageDialogButton.NO,

								MessageDialogButton.CANCEL };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}

				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}

			} else {

				return new MessageDialogButton[] { MessageDialogButton.OK };

			}

		} else {

			return new MessageDialogButton[] { MessageDialogButton.OK };

		}



	case CANCEL:

		if (i + 1 < temporaryButtons.length) {



			if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.RETRY) == 0) {

				if (i + 2 > temporaryButtons.length) {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				} else {

					return new MessageDialogButton[] {

							MessageDialogButton.RETRY,

							MessageDialogButton.CANCEL };

				}

			} else if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.OK) == 0) {

				if (i + 2 > temporaryButtons.length) {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				} else {

					return new MessageDialogButton[] {

							MessageDialogButton.OK,

							MessageDialogButton.CANCEL };

				}

			} else if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.YES) == 0) {



				if (i + 2 > temporaryButtons.length) {

					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.NO) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.YES,

								MessageDialogButton.NO,

								MessageDialogButton.CANCEL };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}

				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}

			} else if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.NO) == 0) {

				if (i + 2 > temporaryButtons.length) {

					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.YES) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.YES,

								MessageDialogButton.NO,

								MessageDialogButton.CANCEL };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}

				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}

			}

		} else {

			return new MessageDialogButton[] { MessageDialogButton.OK };

		}



	case ABORT:

		if (i + 1 < temporaryButtons.length) {



			if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.RETRY) == 0) {



				if (i + 2 < temporaryButtons.length) {



					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.IGNORE) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.ABORT,

								MessageDialogButton.RETRY,

								MessageDialogButton.IGNORE };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}

				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}



			} else if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.IGNORE) == 0) {



				if (i + 2 < temporaryButtons.length) {

					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.RETRY) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.ABORT,

								MessageDialogButton.RETRY,

								MessageDialogButton.IGNORE };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}



				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}

			}

		} else {

			return new MessageDialogButton[] { MessageDialogButton.OK };

		}



	case RETRY:

		if (i + 1 < temporaryButtons.length) {



			if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.ABORT) == 0) {



				if (i + 2 < temporaryButtons.length) {



					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.IGNORE) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.ABORT,

								MessageDialogButton.RETRY,

								MessageDialogButton.IGNORE };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}



				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}



			} else if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.IGNORE) == 0) {



				if (i + 2 < temporaryButtons.length) {



					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.ABORT) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.ABORT,

								MessageDialogButton.RETRY,

								MessageDialogButton.IGNORE };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}



				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}



			} else if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.CANCEL) == 0) {



				if (i + 2 > temporaryButtons.length) {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				} else {

					return new MessageDialogButton[] {

							MessageDialogButton.RETRY,

							MessageDialogButton.CANCEL };

				}



			}

		} else {

			return new MessageDialogButton[] { MessageDialogButton.OK };

		}



	case IGNORE:

		if (i + 1 < temporaryButtons.length) {



			if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.RETRY) == 0) {



				if (i + 2 < temporaryButtons.length) {



					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.ABORT) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.ABORT,

								MessageDialogButton.RETRY,

								MessageDialogButton.IGNORE };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}



				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}



			} else if (temporaryButtons[i + 1]

					.compareTo(MessageDialogButton.ABORT) == 0) {



				if (i + 2 < temporaryButtons.length) {



					if (temporaryButtons[i + 2]

							.compareTo(MessageDialogButton.RETRY) == 0) {

						return new MessageDialogButton[] {

								MessageDialogButton.ABORT,

								MessageDialogButton.RETRY,

								MessageDialogButton.IGNORE };

					} else {

						return new MessageDialogButton[] { MessageDialogButton.OK };

					}



				} else {

					return new MessageDialogButton[] { MessageDialogButton.OK };

				}



			} else {

				return new MessageDialogButton[] { MessageDialogButton.OK };

			}



		}

		break;



	}

	return new MessageDialogButton[] { MessageDialogButton.OK };

}

}
[/code]

What a F_CK is this? :shock:

What a F_CK is this? :shock: [/quote]

Fortran + Swing.

What a porra is this? :shock: [/quote]

[code]public class MessageDialogUtils {

private static Collection OK_CANCEL;
private static Collection YES_NO;
private static Collection YES_NO_CANCEL;
private static Collection RETRY_CANCEL;
private static Collection ABORT_RETRY_IGNORE;

static {
OK_CANCEL = new ArrayList();
OK_CANCEL.add(MessageDialogButton.OK);
OK_CANCEL.add(MessageDialogButton.CANCEL);

YES_NO = new ArrayList<MessageDialogButton>();
YES_NO.add(MessageDialogButton.YES);
YES_NO.add(MessageDialogButton.NO);

YES_NO_CANCEL = new ArrayList<MessageDialogButton>(YES_NO);
YES_NO_CANCEL.add(MessageDialogButton.CANCEL);

RETRY_CANCEL = new ArrayList<MessageDialogButton>();
RETRY_CANCEL.add(MessageDialogButton.RETRY);
RETRY_CANCEL.add(MessageDialogButton.CANCEL);

ABORT_RETRY_IGNORE = new ArrayList<MessageDialogButton>();
ABORT_RETRY_IGNORE.add(MessageDialogButton.ABORT);
ABORT_RETRY_IGNORE.add(MessageDialogButton.RETRY);
ABORT_RETRY_IGNORE.add(MessageDialogButton.IGNORE);

}

public static MessageDialogButton[] buttonsTreatment(MessageDialogButton… buttons) {

List list = Arrays.asList(buttons);

if (list.containsAll(OK_CANCEL))
  return OK_CANCEL.toArray();

else if (list.containsAll(YES_NO_CANCEL))
  return YES_NO_CANCEL.toArray();

else if (list.containsAll(YES_NO))
  return YES_NO.toArray();

else if (list.containsAll(RETRY_CANCEL))
  return RETRY_CANCEL.toArray();

else if (list.containsAll(ABORT_RETRY_IGNORE))
  return ABORT_RETRY_IGNORE.toArray();

return new MessageDialogButton[] { MessageDialogButton.OK };

}
}[/code]

Tô sem uma IDE aqui pra compilar, mas isso deve fazer mais ou menos o serviço. :slight_smile:

Exatamente isso Bruno :slight_smile:

Juro que quando eu vi esse código pela primeira vez, tive que admirar o autor, eu, pessoalmente, não tenho condições intelectuais pra seguir todos os caminhos e returns que ele fez.

Outra opção é ordenar o enum conforme abaixo e usar o Arrays.sort().

[code]public enum MessageDialogButton
{
OK, YES, NO, ABORT, RETRY, IGNORE, CANCEL;
}

public class MessageDialogUtils {

public static MessageDialogButton[] buttonsTreatment(MessageDialogButton… buttons) {

Arrays.sort(buttons);
return buttons;

}
}[/code]
Só não tem o OK :stuck_out_tongue:

O melhor mesmo é parar de tapar o sol com peneira e fazer um enum com as opções fixas, e substituir este buttonsTreatment por eles.

Detalhe, o bloco de inicialização do seu primeiro código tem que ser estático, ele tá de instancia.

Blocos assim não são implicitamente estáticos? :?

Blocos assim não são implicitamente estáticos? :? [/quote]

Nops, você tem que colocar assim:

static { //isso é um bloco estático }

Blocos assim não são implicitamente estáticos? :? [/quote]

Nops, você tem que colocar assim:

static { //isso é um bloco estático }[/quote]
Bom saber, obrigado por tirar minha dúvida! Irei corrigir.

Blocos assim não são implicitamente estáticos? :? [/quote]

Você acaba de errar duas questões na SCJP!
Blocos assim o compilador coloca no construtor da classe. Isso é um inicializador de instância e não um inicializador de classe.

kkk, ainda bem que estou estudando aqui pelo GUJ :wink:

(se bem que falta eu visitar o forum de certificações…)

[quote=victorwss]Você acaba de errar duas questões na SCJP!
Blocos assim o compilador coloca no construtor da classe. Isso é um inicializador de instância e não um inicializador de classe.[/quote]

Construtor da classe?

Bem, blocos de inicialização estática são executados após a classe ter sido definida pela máquina virtual (depois de um defineClass() da vida) e os blocos de inicialização de instância (os que não tem static) são executados exatamente antes do construtor quando um objeto está sendo criado.

[quote=Mauricio Linhares][quote=victorwss]Você acaba de errar duas questões na SCJP!
Blocos assim o compilador coloca no construtor da classe. Isso é um inicializador de instância e não um inicializador de classe.[/quote]

Construtor da classe?

Bem, blocos de inicialização estática são executados após a classe ter sido definida pela máquina virtual (depois de um defineClass() da vida) e os blocos de inicialização de instância (os que não tem static) são executados exatamente antes do construtor quando um objeto está sendo criado.[/quote]

Na verdade o compilador cria os métodos combinando os inicializadores de instância e os construtores, colocando lá também a chamada ao construtor da superclasse.

Infelizmente não tenho mais o código fonte desta pérola, mas já peguei um projeto em uma firma no qual, para cada CLASSE, havia um PACOTE, no qual existia exatamente UMA CLASSE.

Era um sistema com umas 50 classes, mais ou menos assim.

empresa.entidade.Produto.Produto
empresa.entidade.Categoria.Categoria

E por aí ia.

Ao questionar o “programador”, o mesmo teve uma crise histérica comigo e partiu! :shock:

Você poderia nos descrever como isso ocorreu com mais detalhes? 8)

Claro :smiley:

A primeira vista, ao ver aquela enorme quantidade de pacotes (tenho 10 graus de miopia e uns 8 de astigmatismo) pensei: “Uau! Que coisa complexa para algo tão simples!” - E era realmente um sistema muito simples.

Chegando mais perto do monitor, me dei conta do que de fato eram aqueles pacotes. Claro, não pude deixar de “esboçar” um sorriso.
Foi quando perguntei: “Criatura, não faria mais sentido colocar estas classes em um mesmo pacote? Pra que criar um pacote por classe? Qual o sentido disto?”

O sujeito me olhou com olhar de ódio estampado na face, levantou-se diante de mim e disse:

“Kico, você é um metido! Não respeita os que estão começando.” bla bla bla bla bla bla.
(Detalhe: a criatura é formada e estava fazendo pós graduação. FORMADO!)

Se levantou, foi ao banheiro e, uma semana depois, saiu da empresa.

Mas o mais curioso é: eu não ridicularizei o cara! Eu só questionei! Afinal de contas, poderia haver alguma “sabedoria oculta” por trás desta pérola.

E foi isto.

Esta é outra clássica que já vi.

Em um sistema que estavamos desenvolvendo, uma programadora resolveu criar a interface gráfica de uma parte do sistema que, dependendo da ação do usuário, poderia ter consequências desastrosas, pois milhares de registros poderiam ser alterados (no caso, dizia respeito à exclusão de bancos de dados).

Pois bem: a programadora terminou o trabalho, veio toda contente para nós e, juntos, fomos apresentar o resultado para o cliente. O estado de confiança da “profissional” alastrou-se entre nós. Naquele momento, possuíamos CERTEZA de que tudo daria certo (claro, nem sequer haviamos olhado o resultado do trabalho, pois o tempo era nulo).

Então, estamos na frente do cliente, e segue o seguinte diálogo.

_ A ferramenta de exclusão de registros está pronta?
_ Sim, e ficou ótima. A performance ficou excelente.
(haviamos visto os testes unitários desta parte e, realmente, ela tinha razão. A performance era perfeita. E o código, era realmente muito bacana, mas voltemos ao diálogo)

_ Gostaria de ver como isto está no sistema.
_ Ok, vou lhe mostrar. Aqui está o botão. Clique nele para ver o que acontece.

(nossos corações pararam por um segundo ao ver o que surgiu na tela. Nós naquele momento só haviamos visto a camada de negócio. Não a interface gráfica que ela havia desenvolvida (mea culpa, mea culpa, mea culpa!))

Eis que surge na tela uma caixa de diálogo com o seguinte texto:
“Você está prestes a apagar todos os registros do projeto X. Deseja continuar?”
E um único botão: “Ok.”

Este fui eu quem fez, de ontem para hoje e foi bem sutil: Tinha um array de chars com um número par como tamanho. Tinha que percorrê-lo 2 a 2. O for que eu fiz foi o seguinte:

for (int i = 0; i < array.length; i =+ 2) {
     int digitoAtual = array[i] - '0';
     int digitoSeguinte = array[i + 1] - '0';
     // ...
}

O problema é que para arrays longos dava loop infinito e daí dava pau no programa. Só depois de olhar melhor o código é que percebi que ao fazer i =+ 2 na verdade eu estava atribuindo sempre o valor +2 a i. Na verdade o correto seria i += 2. Creio que estou tão acostumado a usar i ++ para percorre arrays que esqueci deste detalhe.