Podczas niedawnej pracy w dużej firmie zauważyłem, że programiści stosowali ten styl kodowania:
Załóżmy, że mam funkcję, która zwraca 12, jeśli wejście to A, 21, jeśli wejście to B, i 45, jeśli wejście to C.
Więc mogę napisać podpis funkcji jako:
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");
}
Ale podczas przeglądu kodu poproszono mnie o zmianę funkcji na:
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);
}
Nie mogę się przekonać, dlaczego drugi kod jest lepszy od pierwszego. Uruchomienie drugiego kodu zdecydowanie zajmie więcej czasu.
Jedynym powodem użycia drugiego kodu może być to, że oferuje on lepszą czytelność. Ale jeśli funkcja jest wywoływana wiele razy, to czy druga funkcja nie spowolni czasu działania narzędzia, które ją wywołuje?
Co o tym myślisz?
switchwydaje się bardziej odpowiednia niżif-else). Ale w pewnym momencie staje się problematyczne. Główną zaletą korzystania z mapy jest to, że można ją załadować z pliku lub tabeli itp. Jeśli kodujesz dane wejściowe na mapie, nie widzę dużej wartości nad przełącznikiem.