Příkaz goto: definice, použití a kritika v programování
Příkaz goto: definice, použití a kritika v programování — co je goto, jak funguje, příklady, problémy a alternativa strukturovaného programování (Java a další).
Příkaz goto je v mnoha programovacích jazycích jednoduchý příkaz pro nepodmíněný skok na označené místo v kódu. Název pochází z anglických slov go a to — doslova „jdi na“. Prakticky umožňuje okamžitě přenést řízení programu na jiný řádek nebo štítek (label) ve stejném kontextu (funkci/proceduře).
Galerie obrázků
1 ObrázekSyntaxe a příklady
Ve většině imperativních jazyků se používá kombinace štítku a samotného příkazu goto. Například v jazyce C:
start: /* nějaký kód */ if (podminka) goto start; V různých jazycích se syntaxe liší, ale princip zůstává stejný — existuje místo (label), na které se přepne provádění.
Podpora v programovacích jazycích
Mnoho jazyků příkaz goto podporuje (např. C, C++, některé skriptovací jazyky, assemblery). Mnoho moderních jazyků jej naopak buď vůbec neobsahuje, nebo jej důrazně nedoporučuje používat. V Javě je goto rezervované slovo, ale nelze ho použít. (Rezervované slovo je slovo, které je součástí programovacího jazyka a nelze ho použít k jiným účelům, například k pojmenování proměnných.)
Teorie a kritika
V informatice existuje teorie nazývaná věta o strukturovaném programu (Böhm–Jacopini, 1966). Tato věta říká, že jakýkoli program lze přepsat tak, aby se řídil strukturami jako jsou sekvence, výběry (if/else) a smyčky (while/for), případně pomocí volání funkcí a metod, bez použití příkazu goto. Z toho plyne, že příkaz goto není z hlediska účelu programování nezbytný.
Kritika goto se soustředí hlavně na:
- čtení a údržbu kódu: časté skoky mohou vést ke „spaghetti kódu“, kde je těžké sledovat tok programu;
- formální ověřitelnost: kód s mnoha goty je složitější analyzovat a testovat;
- modularitu a použití struktur: použití funkcí/metod obvykle vede k lépe organizovanému a znovupoužitelnému kódu.
Alternativy
Mnohé konstrukce nahrazují nebo omezují potřebu goto:
- smyčky (for, while),
- podmíněné příkazy (if/else, switch),
- přerušení a pokračování smyček (break, continue),
- výjimky a zvláštní mechanizmy pro úklid (try/finally),
- návrat z funkcí/procedur a předávání řízení pomocí volání funkcí.
Kdy je použití goto přijatelně?
Přestože je obecně doporučeno goto omezit, existují situace, kdy je jeho použití odůvodněné nebo pragmatické:
- kód nízké úrovně nebo v assembleru, kde není žádná strukturovaná alternativa,
- efektivní implementace stavových strojů nebo generovaného kódu,
- úklid a ošetření chyb v jazycích bez výjimek (v C je běžný vzor: více kroků inicializace, na chybě goto na cleanup),
- rychlé opuštění z více vnořených smyček (i když mnohé jazyky nabízejí označené breaky/continue jako čistší alternativu).
Praktické rady
- Používejte goto výjimečně a jen tam, kde to zjednoduší čitelnost nebo opraví výrazný opakovací vzor (např. cleanup při chybě).
- Pokud už goto používáte, používejte jasné, popisné štítky a komentáře, které vysvětlí důvod přeskoku.
- V jazykách s bohatšími konstrukcemi preferujte strukturované alternatyvy (funkce, výjimky, označené breaky), které zlepšují udržovatelnost.
Technické poznámky
V některých jazycích platí technická omezení při skoku pomocí goto. Například v C/C++ může skok přes inicializaci objektu s nektriviálním konstruktorem způsobit nedefinované chování; také nelze skákat mezi funkcemi. V jiných jazycích jsou skoky více omezené nebo zcela zakázané.
Stručně řečeno: goto je jednoduchý a mocný nástroj nízké úrovně, ale ve většině případů jej lze nahradit přehlednějšími a bezpečnějšími konstrukcemi. Znalost jeho existence a vlastností je užitečná, ale rozumné použití a preference strukturovaného kódu vede k lepší údržbě a spolehlivosti programů.
Použijte
Příkaz goto se obvykle používá se štítkem. Štítek je slovo, které identifikuje místo v kódu. Příkaz goto v kódu obvykle vypadá takto:
goto LABELV tomto příkladu počítač přejde na umístění LABEL.
Příkaz goto se často kombinuje s příkazem if. V takovém případě počítač přejde na jiné místo v kódu pouze tehdy, pokud je něco pravda. Například:
IF podmínka THEN přejít na LABELTo lze číst jako "pokud je nějaká podmínka pravdivá, pak přejdi na místo LABEL".
Různé programovací jazyky mají různá omezení nebo limity pro použití příkazů goto. Například programovací jazykC neumožňuje příkazem goto přejít na místo uvnitř jiné funkce (podprogramu).
Otázky a odpovědi
Otázka: Co je to výrok goto?
A: Příkaz goto je v mnoha programovacích jazycích způsob, jak přejít na jiný řádek kódu.
Otázka: Kolik programovacích jazyků podporuje příkaz goto?
Odpověď: Příkaz goto podporuje mnoho programovacích jazyků.
Otázka: Ve kterém programovacím jazyce je příkaz goto vyhrazeným slovem?
Odpověď: V jazyce Java je goto rezervované slovo, ale nelze ho použít.
Otázka: Co je v programovacích jazycích rezervované slovo?
Odpověď: Rezervované slovo je slovo, které je součástí programovacího jazyka a nelze ho použít k jiným účelům, například k pojmenování proměnných.
Otázka: Co je to věta o strukturovaném programu v informatice?
Odpověď: Věta o strukturovaném programu je teorie v informatice, která říká, že jakýkoli program lze napsat tak, aby se věci prováděly pomocí funkcí a metod, a ne v jednom velmi rozsáhlém programu a příkazů goto.
Otázka: Dokazuje věta o strukturovaném programu, že k psaní programů jsou potřeba příkazy goto?
Odpověď: Ne, věta o strukturovaném programu dokazuje, že příkaz goto není k psaní programů potřeba.
Otázka: Co jsou to funkce a metody v programování?
Odpověď: Funkce a metody jsou menší podprogramy, které se v programování používají k provádění konkrétních úloh.
Související články
Autor
AlegsaOnline.com Příkaz goto: definice, použití a kritika v programování Leandro Alegsa
URL: https://cs.alegsaonline.com/art/39882
Zdroje
- java.sun.com : "The Java Language Specification, Third Edition"
- java.sun.com : "The Java Language Specification, Third Edition"