Nếu nó làm cho mã của bạn khó khăn hơn để đọc, sau đó nó xấu thực hành.
Cho dù đó là trường hợp trong ví dụ cụ thể của bạn là tùy thuộc vào bạn để quyết định, nhưng nói chung tôi muốn nói nó có thể là trường hợp.
Bạn hỏi giải pháp thay thế ...
Trích xuất một số mã của bạn thành một phụ chức năng. Ví dụ:
case 'foo' :
myVar = 'blah';
break;
case 'bar' :
myVar = secondLevelFunction();
break;
Ở đây, secondLevelFunction()
chứa switch()
tuyên bố thêm trong đó mỗi case
trả về một giá trị cho myVar
.
Sử dụng ánh xạ mảng.Ví dụ:
var mapper = {'foo':'blah', 'bar':'bibble', etc};
//now, instead of a big switch(input) { .... } block that sets myVar
//for each option, you can just set it directly in a single line, like so:
var myVar = mapper[input];
Ngoài ra, nếu bạn đang tìm kiếm biện pháp cụ thể về chất lượng mã, bạn nên tìm hiểu về Cyclomatic Complexity. Đây là thước đo mức độ phức tạp của hàm. Phép đo được thực hiện bằng cách xem có bao nhiêu "điểm quyết định" mà hàm có. Mỗi case
, if
, vòng lặp, v.v. là "điểm quyết định". Bạn càng có nhiều chức năng của bạn càng phức tạp.
Độ phức tạp của Cyclomatic liên quan đến chất lượng mã và thực hành mã hóa tốt, vì vậy nếu hàm của bạn có điểm CC cao (có thể sẽ làm nếu nó có nhiều khối lồng nhau switch
), thì đó là dấu hiệu của chất lượng mã kém . Cả hai giải pháp thay thế mà tôi đã mô tả ở trên đều có thể giúp giải quyết vấn đề này. Tôi sẽ để nó cho bạn đọc thêm về CC.
Rõ ràng là các giải pháp thay thế sẽ cần phải được điều chỉnh theo nhu cầu của bạn, nhưng hy vọng chúng sẽ cung cấp cho bạn một số ý tưởng.
Tôi có thể xem các trường hợp OK. Nhưng tôi nhìn chằm chằm vào nó khá lâu và xem liệu tôi có thể tìm ra một kỹ thuật đơn giản hơn không. –
Không thực sự là một bản dupe, nhưng có thông tin liên quan/thú vị: http://stackoverflow.com/questions/7807970/nesting-switch-cases-in-javascript-any-speed-advantage – Joum
Để nhận được câu trả lời có liên quan, sẽ tốt hơn nếu thêm mã của bạn vào câu hỏi ... –