Příspěvky Programovanie v jazyku C++: Príkaz goto
Ad 'Poznámka šéfredaktora': Presne tak, vynúť sa dá vždy, aj keď niekedy je ktomu potrebných viac zanorených cyklov, podmienkové premenné,...
Při první přednášce Základů programování nám přednášející řekl, že od zkoušky vyrazí každého, kdo "goto" použije. Podle něj neexistuje opodstatněný důvod pro existenci takového příkazu.
V linuxovém jádře se goto poměrně vydatně používá, protože C na rozdíl od C++ neobsahuje výjimky. Typicky v ovladačích může nějaká operace selhat na celé řadě míst a po selhání je potřeba vše uvést do řádného stavu (především uvolnit všechny alokované prostředky, vrátit nastavení zařízení apod.). Pokud se to bude řešit jen vnořenými podmínkami, vznikne tím nepřehledný a špatně spravovatelný kód. Tady je použití goto zcela na místě, vytvoří takovou "cibuli", která zajistí řádný úklid pro jakékoli selhání a zároveň je přehledná.
Je to vidět třeba tady (vybral jsem náhodně jeden zdrojový soubor, podobných je tam spousta): http://lxr.free-electrons.com/source/drivers/char/hw_random/core.c
Je to vidět třeba tady (vybral jsem náhodně jeden zdrojový soubor, podobných je tam spousta): http://lxr.free-electrons.com/source/drivers/char/hw_random/core.c
Ve škole a obzvlášť v předmětech co mají v názvu "základy" nebo "úvod" se napovídá spousta věcí, které nejsou pravda :-)
Fakt ale je, že při programování ve škole těžko někdo narazí na problém, kdy by bylo opodstatněné goto použít, a je celkem rozumné ho studentům zakazovat -- ono goto je takové "lákavé", umožňuje hodně si zjednodušit život (aspoň teda dočasně) a vyhnout se těm "správným ale složitým" postupům.
Jinak tedy v článku jsou spíš ukázky toho, kdy goto skutečně nepoužít a když to někdo udělá (jinde než v ukázce, nejlépe odstrašující) tak by zasloužil zlomit klávesnici :-)
Co tedy rozhodně nedělat:
- Víc labelů v jedné funkci. Když se navíc na každý skáče vícekrát, tak aby si člověk pomalu maloval, co ta funkce vlastně dělá.
- goto v cyklu. Na ukočení cyklu prostě slouží break.
- Skoky "nahoru" ve funkci. Skok "zpátky" strašně znepřehledňuje průběh funkce. Takové goto je obvykle znakem toho, že by se z části kódu měla udělat samostatná funkce.
Obecně bych byl proti jakémukoli goto, které implementuje nějakou "funkcionalitu" -- tedy dělá něco, co nějak souvisí se samotným účelem funkce.
Osobně uznávám jen takové to klasické "goto out;", které už tu zmiňoval Lukáš -- skok na konec funkce, kde se vyřeší return a uvolňování paměti (prostředků obecně) na jednom místě, aby to nebylo třeba řešit v každém ifu.
Fakt ale je, že při programování ve škole těžko někdo narazí na problém, kdy by bylo opodstatněné goto použít, a je celkem rozumné ho studentům zakazovat -- ono goto je takové "lákavé", umožňuje hodně si zjednodušit život (aspoň teda dočasně) a vyhnout se těm "správným ale složitým" postupům.
Jinak tedy v článku jsou spíš ukázky toho, kdy goto skutečně nepoužít a když to někdo udělá (jinde než v ukázce, nejlépe odstrašující) tak by zasloužil zlomit klávesnici :-)
Co tedy rozhodně nedělat:
- Víc labelů v jedné funkci. Když se navíc na každý skáče vícekrát, tak aby si člověk pomalu maloval, co ta funkce vlastně dělá.
- goto v cyklu. Na ukočení cyklu prostě slouží break.
- Skoky "nahoru" ve funkci. Skok "zpátky" strašně znepřehledňuje průběh funkce. Takové goto je obvykle znakem toho, že by se z části kódu měla udělat samostatná funkce.
Obecně bych byl proti jakémukoli goto, které implementuje nějakou "funkcionalitu" -- tedy dělá něco, co nějak souvisí se samotným účelem funkce.
Osobně uznávám jen takové to klasické "goto out;", které už tu zmiňoval Lukáš -- skok na konec funkce, kde se vyřeší return a uvolňování paměti (prostředků obecně) na jednom místě, aby to nebylo třeba řešit v každém ifu.
Kod, ktory vyhlada prvy nulovy prvok v n-dimenzionalnom (napr. n=3 => 3x vnoreny cyklus) poli je s goto ovela citatelnejsi, ako po kazdom cykle testovat nejaku stavovu premennu.
BTW, assembler bez prikazu goto (JUMP) by ani nemohol existovat.
Aby to bolo jasnejsie: Ak programovaci jazyk goto umoznuje, nie je vhodne ho studentom zakazovat pouzivat, alebo ich zo skusky za pouzitie vyhadzovat, pripadne im "lamat klavesnicu". Kazdy nech sa nauci na vlastnych chybach, ak to mysli s programovanim v C++ vazne. Ked niekto goto nevie pouzivat a robi mu problemy, tak nech ho ani nepouziva a najlepsie ani C++, aby nahodou nezabudol napr. dealokovat pole alebo zavolat destruktor.
BTW, assembler bez prikazu goto (JUMP) by ani nemohol existovat.
Aby to bolo jasnejsie: Ak programovaci jazyk goto umoznuje, nie je vhodne ho studentom zakazovat pouzivat, alebo ich zo skusky za pouzitie vyhadzovat, pripadne im "lamat klavesnicu". Kazdy nech sa nauci na vlastnych chybach, ak to mysli s programovanim v C++ vazne. Ked niekto goto nevie pouzivat a robi mu problemy, tak nech ho ani nepouziva a najlepsie ani C++, aby nahodou nezabudol napr. dealokovat pole alebo zavolat destruktor.
Živím se jako c++ developer, dlouhou dobu dělám u jedné firmy, ale přijde mi že jsem dost platově podhodnocený. Jaká je normální výplata v tomto oboru máte zkušenosti?
Jestli aktivně hledáte práci, tak bych mohl doporučit agenturu, přes kterou jsem si našel práci v IT během pár dnů. Mají i dokonce volně přístupnou databázi, kde se hledají lidi do IT.....
Jakože rovnou vypsané pozice někde mohu vidět? případně prosím kde?
Možno toto Vám pomôže sa v platoch nejak zorientovať. Je tam porovnanie aj s iným programátorskými pozíciami.
https://www.platy.cz/platy/informacni-technologie/programator-cpp
https://www.platy.cz/platy/informacni-technologie/programator-cpp