Antipotype For-Case là gì?


17

Bài viết TDWTF hôm nay bắt đầu bằng một lời thú nhận từ tác giả:

Tôi không biết mô hình chống trường hợp là gì cho đến gần đây, khi có một loạt các bài báo lên án nó là một mô hình chống. Tôi chắc chắn rằng tôi có thể đã sử dụng nó, tại một số điểm, nhưng tôi chưa bao giờ biết nó theo tên . Nó được coi là một phản mẫu trong sách giáo khoa thường bao hàm sự hiểu lầm về vòng lặp, báo cáo trường hợp, vấn đề đang được giải quyết hoặc một số kết hợp của cả ba.

Sau đó, anh ta tiếp tục như thể người đọc, tự nhiên biết mô hình chống trường hợp là gì mà không cần giải thích gì thêm.

Nhưng tôi không! Tôi chưa thấy "loạt bài viết" mà Remy nói đến, và tài liệu tham khảo quan trọng duy nhất tôi có thể tìm thấy trên Google (ngoài bài viết của Remy) là một bài đăng trên blog của Raymond Chen về antipotype for-if , có liên quan rõ ràng . Tuy nhiên, anh ta cũng không định nghĩa "mẫu chống trường hợp".

"Chống trường hợp" này là gì mà những kẻ này đang nói đến, và điều gì làm cho nó trở thành một mô hình chống?



3
Nó thường được gọi là (và dễ dàng tìm thấy hơn thông qua các công cụ tìm kiếm) dưới dạng mô hình chống chuyển đổi vòng lặp
David Arno

Câu trả lời:


23

"Mẫu" đã được giới thiệu trong một bài báo WTF hàng ngày trước đó. Ý tưởng cơ bản là bạn có một forvòng lặp với casebên trong nó chọn dựa trên forbiến chỉ số vòng lặp.

Giả sử các biến chỉ số không thể thay đổi bên trong vòng lặp, (mà không phải là luôn luôn đúng, tùy thuộc vào ngôn ngữ mà bạn đang sử dụng,) một chút phân tích cho thấy rằng việc thực hiện là chính xác giống như nếu bạn loại bỏ các forcasehoàn toàn và tất cả các khối trường hợp được thực hiện tuần tự.


0

Nói một cách đơn giản, bạn đang lồng hai phương thức kiểm soát luồng khác nhau, điều này làm cho mã khó hiểu hơn.

Nếu bạn thấy một vòng lặp for, bạn thường cho rằng các điều kiện vòng lặp sẽ điều khiển logic trong vòng lặp. Nhưng nếu sau đó bạn lồng một câu lệnh toàn bộ trường hợp vào bên trong, với tất cả logic riêng của nó, sẽ đi ra ngoài cửa sổ.


1
Không có gì sai với việc lồng hai cấu trúc dòng điều khiển. Đôi khi bạn cần. Nhưng trong trường hợp này nó vô dụng.
Phục hồi lại

"làm cho mã khó hiểu hơn." Boy, đó là bao giờ dưới mức của ngày / tháng / năm.
Peter Rowell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.