Co to jest Antypattern For-Case?

17

Dzisiejszy artykuł TDWTF zaczyna się od spowiedzi autora:

Do niedawna nie wiedziałem, czym jest anty-wzór For-Case, kiedy pojawiło się mnóstwo artykułów potępiających go jako anty-wzór. Jestem pewien, że kiedyś go użyłem , ale nigdy nie znałem go po imieniu . Jest uważany za podręcznikowy wzorzec, który na ogół oznacza nieporozumienie dla pętli for, instrukcji case, rozwiązania problemu lub kombinacji wszystkich trzech.

Następnie postępuje tak, jakby czytelnik oczywiście wiedział, czym jest anty-wzór For-Case, bez potrzeby dalszego wyjaśniania.

Ale ja nie! Nie widziałem „fali artykułów”, o której mówi Remy, a jedynym znaczącym odniesieniem, które mogę znaleźć w Google (oprócz artykułu Remy'ego) jest post na blogu Raymonda Chena na temat anty - wzorca, który najwyraźniej jest powiązany . Jednak nie definiuje też „anty-wzoru dla przypadków”.

O czym jest ten „anty-wzór”, o którym mówią ci faceci, i co sprawia, że ​​jest to anty-wzór?

Mark Amery
źródło
3
Jest powszechnie znany jako (i łatwiejszy do znalezienia za pośrednictwem wyszukiwarek) jako wzorzec przełączania pętli
David Arno

Odpowiedzi:

23

„Wzór” został wprowadzony we wcześniejszym artykule Daily WTF. Podstawową ideą jest to, że masz forpętlę z jej casewnętrzem, która wybiera na podstawie forzmiennej indeksu pętli.

Zakładając, że zmiennej indeksu nie można zmienić wewnątrz pętli (co nie zawsze jest prawdą, w zależności od używanego języka), trochę analizy pokazuje, że wykonanie jest dokładnie takie samo, jakbyś usunął fori casecałkowicie i wszystkie bloki skrzynek zostały po prostu wykonane sekwencyjnie.

Mason Wheeler
źródło
0

Mówiąc najprościej, zagnieżdżasz dwie różne metody kontroli przepływu, co sprawia, że ​​kod jest trudniejszy do zrozumienia.

Jeśli widzisz pętlę for, ogólnie zakładasz, że warunki pętli kontrolują logikę w pętli. Ale jeśli następnie zagnieździsz w środku całą instrukcję case, z całą swoją logiką, to wychodzi ona z okna.

Satanicpuppy
źródło
1
Nie ma nic z natury złego w zagnieżdżaniu dwóch struktur przepływu sterowania. Czasami musisz. Ale w tym przypadku jest to bezużyteczne.
Przywróć Monikę
„co sprawia, że ​​kod jest trudniejszy do zrozumienia”. Chłopcze, czy to zawsze niedopowiedzenie dnia / miesiąca / roku.
Peter Rowell