Enquanto eu trabalhava recentemente em uma grande empresa, notei que os programadores seguiram esse estilo de codificação:
Suponha que eu tenha uma função que retorne 12 se a entrada for A, 21 se a entrada for B e 45 se a entrada for C.
Para que eu possa escrever a assinatura da função como:
int foo(String s){
if(s.equals("A")) return 12;
else if(s.equals("B")) return 21;
else if(s.equals("C")) return 45;
else throw new RuntimeException("Invalid input to function foo");
}
Mas, na revisão de código, fui solicitado a alterar a função para o seguinte:
int foo(String s){
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("A", 12);
map.put("B", 21);
map.put("C", 45);
return map.get(s);
}
Não consigo me convencer de por que o segundo código é melhor que o primeiro. O segundo código definitivamente levaria mais tempo para ser executado.
A única razão para usar o segundo código pode ser que ele oferece melhor legibilidade. Mas se a função estiver sendo chamada várias vezes, a segunda função não diminuiria o tempo de execução do utilitário que a chamava?
O que você pensa sobre isso?
switch
parece mais apropriado queif-else
). Mas, em algum momento, isso se torna problemático. A principal vantagem de usar um mapa é que você pode carregá-lo de um arquivo ou tabela, etc. Se você estiver codificando a entrada para o mapa, não estou vendo muito valor em um comutador.