Java Performace

8 respostas
fmy_1

Galera tenho uma duvida que pode parecer um tanto quanto besta, mas vamos lá, supondo que existe o seguinte codigo:

//Funcao que retorna String
public String getSuposicao(){
return this.suposicao;
}

//Outra funcao que retorna String
public String verificacao(String s){
if(s.equals("tipoA"))return "aceito";
else return "negado";
}

-> Supondo o codigo acima qual maneira de programação é melhor? Segue abaixo as duas maneiras que pensei:

CODIGO 1

String s = getSuposicao();
String ss = verificacao(s);
System.out.println(ss);

CODIGO 2

System.out.println(verificacao(getSuposicao));

-> Pessoal qual metodo tem melhor performace? Qual melhor maneira de programação? Sendo que minha duvida é o seguinte, o “Codigo 1” é mais visivel mais facil de entender o “Codigo 2” é mais compacto, e nos deparamos diversas vezes com estes tipos de circunstancias onde precisamos chamar funcoes dentro de funcoes, entao gostaria de saber qual a melhor solucao nestes casos.

Obrigado pessoal, se puderem me ajudar, valeu!! :smiley:

8 Respostas

ViniGodoy

Acho que performance é a última preocupação nesse caso. Se houver alguma diferença, será insignificante.

Eu geralmente prefiro a forma mais compacta. Ela evita a criação de variáveis desnecessariamente. Geralmente, é uma boa política criar variáveis antes de onde elas serão usadas, no último momento possível, e com o menor escopo possível. O código compacto é o melhor exemplo dessa prática.

ViniGodoy

Outras dicas:

//Outra funcao que retorna String
public String verificacao(String s){
   //Compare a constante com a variável. É mais seguro do que fazer o 
   //contrário e também cobre o caso null

   if("tipoA".equals(s)) return "aceito";

   //Se vocë deu "return" num if, pode dispensar o else.
   return "negado";
}
Outra forma seria usar o operador ternário:
public String verificacao(String s){   
   return "tipoA".equals(s) ? "aceito" : "negado";
}

Também é uma boa observar as convenções de código da sun.

filipenf

Em outras linguagens isso pode fazer bastante diferença. Em C++ por exemplo quanto mais vc puder evitar a utilização do operador de cópia melhor ( ou seja, não passar parâmetros por valor mas por referência ). No caso do java, praticamente não há diferença, visto que tudo é reference, além do que o compilador e a vm otimizam o código pra executar mais rápido. Então como disse o ViniGodoy o mais importante é seguir as convenções de código pra ter um programa legível, que você possa dar manutenção depois.

ViniGodoy

Não existe passagem por referência em Java.

Mas as variáveis de objetos são referências para os reais endereços do objeto na memória. Ao se passar uma variável dessas por parâmetro, faz-se uma cópia da referência.

Isso explica pq isso funciona:

public void zerar(Numero num) { num.set(0); }

E isso não:

public void zerar(Numero num) { //Altera o num interno, mas o endereço da referência externa, de quem //chamou zerar, permanece intacta. num = new Numero(0); }

No caso do C++, muito provavelmente os parâmetros vão estar declarados como const Classe& objeto, mas, realmente, é o programador que deve estar atento a esses detalhes… Variáveis temporárias podem mesmo gerar cópias imprevistas (e muitas vezes incorretas) e por isso, é bom desabilitar esses operadores, caso você não queira que isso aconteça (para isso, basta colocar a assinatura do operador = e do construtor de cópia na sessão private de sua classe no .h, ou estender boost::noncopyable).

filipenf

foi isso que eu quis dizer… tudo é reference. Em C++ não é assim, você tem ponteiros, referências e objetos, e pode passar para os métodos ou retornar qualquer um dos três. Quando você passa um objeto por valor, ele copia o conteúdo daquele objeto e envia a ‘nova instância’ para o método. A diferença do java é que, fazendo um paralelo ao C++ é como se tudo fosse referência.

ViniGodoy

Eu sei, só reforcei o conceito pq isso é tema de muita confusão…

filipenf

Com certeza… meu post anterior ficou meio confuso mesmo… :oops:

m0ska

acho que vc poderia user um valor boleano no segundo método.

Criado 25 de junho de 2009
Ultima resposta 25 de jun. de 2009
Respostas 8
Participantes 4