Como podemiamos tornar este código eficiente sem perder a legibilidade do código ?
switch (cenario) {
case 2:
case 3:
case 4:
this.alterarIdentificacaoParte(parteProcessoOriginal.getCpf(), parteProcesso.getCpf());
NumeroParte = new BigDecimal(String.valueOf(parteProcesso.getMatricula()));
tipoAutor = new BigDecimal(1); //Empregado
this.manterPartes(NumeroParte, tipoAutor, parteProcesso.getRazaoSocial(), 'I');
break;
case 5:
case 6:
case 7:
case 8:
this.alterarIdentificacaoParte(parteProcessoOriginal.getCodigoParteProcesso(), parteProcesso.getCpf());
NumeroParte = new BigDecimal(String.valueOf(parteProcesso.getMatricula()));
tipoAutor = new BigDecimal(1); //Empregado
this.manterPartes(NumeroParte, tipoAutor, parteProcesso.getRazaoSocial(), 'I');
break;
case 9:
case 10:
this.alterarIdentificacaoParte(parteProcessoOriginal.getCtps(), parteProcesso.getCpf());
NumeroParte = new BigDecimal(String.valueOf(parteProcesso.getMatricula()));
tipoAutor = new BigDecimal(1); //Empregado
this.manterPartes(NumeroParte, tipoAutor, parteProcesso.getRazaoSocial(), 'I');
break;
case 11:
this.alterarIdentificacaoParte(parteProcessoOriginal.getCtps(), parteProcesso.getCpf());
break;
case 12:
case 13:
case 14:
NumeroParte = new BigDecimal(String.valueOf(parteProcesso.getCpf()));
tipoAutor = new BigDecimal(2); //Pessoa Fisica
this.manterPartes(NumeroParte, tipoAutor, parteProcesso.getRazaoSocial(), 'I');
break;
case 15:
case 16:
this.alterarIdentificacaoParte(parteProcessoOriginal.getCodigoParteProcesso(), parteProcesso.getCpf());
break;
case 17:
this.alterarIdentificacaoParte(parteProcessoOriginal.getCodigoParteProcesso(), parteProcesso.getCtps());
break;
}
Podemos perceber que cada cenário executa a mesma coisa e infelizmente até onde sei a JAVA não possui um
switch que poderiamos usar igual ao Delphi, que utiliza em seus cases um limite de case(x…y):
Será que seria viável pedir pra lançar implementar um switch desses ?
A forma como o código estar funciona perfeitamente, só que estavamos conversando que talvés não seja a melhor forma de utilizar
tendo em vista que a performance talvés seria afetada, uma vez que faz passagem completa nos cases…
Vamos debater sobre o assunto…
Agradeço aos futuros comentários.
Se você vir a saída do javac e usar o javap para mostrar os bytecodes, vai ver que ele usa a instrução tableswitch, que no seu caso (constantes pequenas e contíguas) é tão ou mais eficiente que uma coleção de ifs. (Se as constantes fossem grandes ou não contíguas, então seria usado tablelookup, que é mais ou menos como uma série de ifs consecutivos).
pois eh rapaz… O brother que fez o código explica que fica mais legível pq assim vc consegue entender que de x a y faz algo… Fez isso pra não ter redundância de código. Conversando aqui vi que não fica tão eficiente como deveria pq acaba fazendo uma passagem direta pelo case sem fazer nada…
Mas tb não encontrei algo pra colocar no lugar que fosse tão legível da forma como ele quer…
Se o switch da JAVA pudesse ter em seu case em exemplo como esse
a) Não existe o “case 1…12” que existe, por exemplo, no Delphi, porque tal construção não existia no C ou no C++ (e não existe ainda) na época em que o James Gosling definiu a linguagem.
Se quiser, poste uma RFE para solicitar essa alteração da linguagem para o Java 7.0. O lugar para pedir isso é em http://bugs.sun.com . Não se esqueça de pedir isso em inglês - peça ajuda a alguém se necessário.
b) No seu caso, é até mais eficiente que uma série de ifs do tipo “if (1 <= x && x <= 12) … else if (13 <= x && x <= 25) …” Isso porque o seu switch/case é convertido para uma instrução especial (tableswitch) que vai diretamente para o lugar desejado no código, a partir do valor.
c) O que o Sene disse não é verdade - cada um desses cases é considerado.