Sekvence přepínání smyček - Loop-switch sequence
A sekvence přepínání smyčky[1] (také známý jako paradigma pro případ[2] nebo Anti-Duffovo zařízení ) je programování antipattern kde je jasná sada kroků implementována jako switch-within-a-loop. Sekvence přepínání smyčky je specifickým derivátem špagetový kód.
Není to nutně antipattern použít a příkaz switch ve smyčce - považuje se to pouze za nesprávné, když se použije k modelování známé posloupnosti kroků. Nejběžnějším příkladem správného použití přepínače ve smyčce je inverze kontroly například obslužná rutina události. Ve smyčkách obsluhy událostí není sled událostí v době kompilace znám, takže opakované přepínání je nezbytné a správné (viz programování řízené událostmi, smyčka události a událostí řízený konečný stavový stroj ).
Nejedná se o antipattern výkonu, i když to může vést k bezvýznamnému trestu za výkon kvůli chybějícímu rozvinutá smyčka. Spíše se jedná o jasný vzor, protože v každém netriviálním příkladu je mnohem obtížnější dešifrovat záměr a skutečnou funkci kódu než přímější refaktorované řešení.
Příklad
Řešení založené na událostech by implementovalo a rozhraní posluchače:
Tětiva klíč = nula;Tětiva hodnota = nula;Seznam<Tětiva> parametry = nula;int sloupec = 0;veřejnost prázdnota addToken(žeton) { // analyzuje klíč, hodnotu a poté tři parametry přepínač (sloupec) { případ 0: parametry = Nový Spojový seznam<Tětiva>(); klíč = žeton; přestávka; případ 1: hodnota = žeton; přestávka; výchozí: parametry.přidat(žeton); přestávka; } -li (++sloupec >= 5) { sloupec = 0; CompleteRow(klíč, hodnota, parametry); }}
Ale bez posluchače se stává příkladem antipatteru:
// analyzuje klíč, hodnotu a poté tři parametry Tětiva klíč = nula;Tětiva hodnota = nula;Seznam<Tětiva> parametry = Nový Spojový seznam<Tětiva>();pro (int i = 0; i < 5; i++) { přepínač (i) { případ 0: klíč = proud.analyzovat(); přestávka; případ 1: hodnota = proud.analyzovat(); přestávka; výchozí: parametry.přidat(proud.analyzovat()); přestávka; }}
A tady je refaktorované řešení:
// analyzuje klíč a hodnotuTětiva klíč = proud.analyzovat();Tětiva hodnota = proud.analyzovat();// analyzovat 3 parametrySeznam<Tětiva> parametry = Nový Spojový seznam<Tětiva>();pro (int i = 0; i < 3; i++) { parametry.přidat(proud.analyzovat());}
Reference
- ^ "Sekvence přepínání smyček". ÚROVEŇ KÓDU. Citováno 11. dubna 2016.
- ^ Paradigma FOR-CASE a Zapnuté smyčky na Denní WTF