Trong khi gần đây tôi làm việc tại một công ty lớn, tôi nhận thấy rằng các lập trình viên ở đó theo phong cách mã hóa này:
Giả sử tôi có hàm trả về 12 nếu đầu vào là A, 21 nếu đầu vào là B và 45 nếu đầu vào là C.
Vì vậy, tôi có thể viết chữ ký hàm là:
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");
}
Nhưng khi xem lại mã, tôi được yêu cầu thay đổi chức năng như sau:
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);
}
Tôi không thể thuyết phục bản thân tại sao mã thứ hai tốt hơn mã thứ nhất. Mã thứ hai chắc chắn sẽ mất nhiều thời gian hơn để chạy.
Lý do duy nhất để sử dụng mã thứ hai có thể là nó cung cấp khả năng đọc tốt hơn. Nhưng nếu chức năng này được gọi nhiều lần thì chức năng thứ hai có làm chậm thời gian chạy của tiện ích gọi nó không?
Bạn nghĩ gì về điều này?
switch
có vẻ phù hợp hơnif-else
). Nhưng đến một lúc nào đó, nó trở nên có vấn đề. Ưu điểm chính của việc sử dụng Bản đồ là bạn có thể tải nó từ tệp hoặc bảng, v.v. Nếu bạn khó mã hóa đầu vào vào bản đồ, tôi không thấy nhiều giá trị qua một công tắc.