Jak můžu opustit funkci

balki

Re:Jak můžu opustit funkci
« Odpověď #15 kdy: 12. 07. 2018, 22:38:03 »
Chtěl tím říci, že puristi…
Ovšem je hloupé, když chce být někdo purista a puntičkář, a zamotá break mezi způsoby, jak v C ukončit funkci. Čtenář pak totiž může pochybovat, jestli dotyčný vůbec umí programovat…

Boha jeho, clovek vam toho Buresa aj dopraje, clovek aspon vie, ze ste si ho nezvolili omylom.


LambdaBender

Re:Jak můžu opustit funkci
« Odpověď #16 kdy: 12. 07. 2018, 23:05:53 »
Normálního člověka to nenapadne. Normální člověk chápe, že chtěl předat myšlenku. Normální člověk neprudí... oh wait!
Jistěže mi připadalo pravděpodobné, že balki prostě jen prudí. Ale předpokládám u lidí vždy tu lepší variantu, proto jsem se zeptal – co kdyby tam opravdu nějaká myšlenka byla a já jsem jí přehlédl?
Balki a myšlenka?  ;D

balki

Re:Jak můžu opustit funkci
« Odpověď #17 kdy: 12. 07. 2018, 23:11:53 »
Normálního člověka to nenapadne. Normální člověk chápe, že chtěl předat myšlenku. Normální člověk neprudí... oh wait!
Jistěže mi připadalo pravděpodobné, že balki prostě jen prudí. Ale předpokládám u lidí vždy tu lepší variantu, proto jsem se zeptal – co kdyby tam opravdu nějaká myšlenka byla a já jsem jí přehlédl?
Balki a myšlenka?  ;D

Skratka, veci ako break, continue, goto by sa mali pouzivat v stave najhorsej nudze. Procedura by mala mat podla moznosti len jeden return.  To ze tu mate vystudovane hnojariny a potrebujete si honit ego a slovickarit, na tomto fakte nic nezmeni.

LambdaBender

Re:Jak můžu opustit funkci
« Odpověď #18 kdy: 12. 07. 2018, 23:38:13 »
Normálního člověka to nenapadne. Normální člověk chápe, že chtěl předat myšlenku. Normální člověk neprudí... oh wait!
Jistěže mi připadalo pravděpodobné, že balki prostě jen prudí. Ale předpokládám u lidí vždy tu lepší variantu, proto jsem se zeptal – co kdyby tam opravdu nějaká myšlenka byla a já jsem jí přehlédl?
Balki a myšlenka?  ;D
Skratka, veci ako break, continue, goto by sa mali pouzivat v stave najhorsej nudze. Procedura by mala mat podla moznosti len jeden return.  To ze tu mate vystudovane hnojariny a potrebujete si honit ego a slovickarit, na tomto fakte nic nezmeni.
To tě naučili na VOŠ salašnické?  ;)

jouda

Re:Jak můžu opustit funkci
« Odpověď #19 kdy: 12. 07. 2018, 23:51:42 »
Skratka, veci ako break, continue, goto by sa mali pouzivat v stave najhorsej nudze. Procedura by mala mat podla moznosti len jeden return.  To ze tu mate vystudovane hnojariny a potrebujete si honit ego a slovickarit, na tomto fakte nic nezmeni.
Věci jako break, continue, a v nejhorším i to goto by se měly používat tam, kde to dává smysl co do přehlednosti v rámci daného jazyka a dané úlohy.

A diskuse o dobru, zlu, milionu vnořených ifů případně try/catch a jednoho goto a krajní nouzi nepatří jinam než na teologii, již od doby pánů Churche a Turinga, kteří nám nemoudrým zjevili, že všechno jedno jest fakticky ekvivalentní.

P.S. Chudák zjevnej začátečník, kterej je až tak nezkušenej, že ho vůbec napadne se tu na cokoli zeptat.


balki

Re:Jak můžu opustit funkci
« Odpověď #20 kdy: 13. 07. 2018, 00:04:12 »
Skratka, veci ako break, continue, goto by sa mali pouzivat v stave najhorsej nudze. Procedura by mala mat podla moznosti len jeden return.  To ze tu mate vystudovane hnojariny a potrebujete si honit ego a slovickarit, na tomto fakte nic nezmeni.
Věci jako break, continue, a v nejhorším i to goto by se měly používat tam, kde to dává smysl co do přehlednosti v rámci daného jazyka a dané úlohy.

A diskuse o dobru, zlu, milionu vnořených ifů případně try/catch a jednoho goto a krajní nouzi nepatří jinam než na teologii, již od doby pánů Churche a Turinga, kteří nám nemoudrým zjevili, že všechno jedno jest fakticky ekvivalentní.

P.S. Chudák zjevnej začátečník, kterej je až tak nezkušenej, že ho vůbec napadne se tu na cokoli zeptat.

Ja neviem, len som to normalne napisal, ako dobre mienenu radu. Nemalo to byt, ziadne trollenie. Ale asi sa v tom nasli, tak ich to nejak popudilo.

Uz som videl v zivote tolko kurvenia strukturalneho programovania pomocou vyssie uvedenych statementov, ze som povazoval svoj prispevok za dobry napad. Ono je potom bolest taky kod upravovat.  Aj vnorene if-y sa daju vyriesit, vsetko sa da.  Holt, root, tu je vsetko urazka. Clovek si predstavi plesateho spoteneho jirsaka s ponozkami v sandaloch, ako vybojoval dalsiu zivotnu bitku. Normalne mi je ho luto teraz, ze mu to kazim. Tak teda, vyhrali ste, no ste chlapaci, gratulujem, ja som nula. *Palec hore*

Trollopata

Re:Jak můžu opustit funkci
« Odpověď #21 kdy: 13. 07. 2018, 00:23:37 »
Když to v nějakém specifickém případě pomůže k lepší čitelnosti kódu, proč nemít víc returnů? IDE mi je stejně označí, když budu potřebovat. Totéž break, continue... Když jsou nějaké konstrukce ekvivalentní, volím zpravidla tu s nejlepší čitelností, protože nejsem sobec a myslím na ostatní, co ten kód budou po mně v budoucnu luštit.

Re:Jak můžu opustit funkci
« Odpověď #22 kdy: 13. 07. 2018, 07:31:31 »
Skratka, veci ako break, continue, goto by sa mali pouzivat v stave najhorsej nudze. Procedura by mala mat podla moznosti len jeden return.  To ze tu mate vystudovane hnojariny a potrebujete si honit ego a slovickarit, na tomto fakte nic nezmeni.
Ty vaše rady jsou dobré akorát v případě, kdy chcete psát špatný a nečitelný kód. Protože papouškujete rady, o nichž jste možná někde něco zaslechl, ale úplně jste je nepochopil.

V případě toho returnu ta rada ve skutečnosti zní, že procedura by měla mít jednu hlavní linku, ve které se řeší její výkonný kód, a tato hlavní linka by měla být přímo v těle té procedury. Tím, že je jedna, bude mít tedy i jeden return. Je to opatření právě proti tomu, aby v proceduře bylo několik vnořených velkých ifů, z nichž každý bude dělat něco jiného a bude mít svůj vlastní konec – taková procedura dělá mnoho věcí a je lepší jí rozdělit.

K tomu, aby bylo možné kód takhle napsat, se často používá technika, kdy na začátku procedury vyhodnotíte vstupní parametry, a teprve když je vše v pořádku, následuje vlastní výkonný kód. Když parametry v pořádku nejsou, opustíte proceduru hned – buď pomocí returnu, nebo v jiných jazycích také pomocí výjimek. Ostatně pravidlo „jediný výstupní bod procedury“ by jakýkoli smysl výjimek úplně pohřbilo.

Takže to vaše zkomolené pravidlo o jediném returnu je ve skutečnosti pravým opakem toho skutečného pravidla, které se programátorům doporučuje.

Upozornění na to, že házíte break, continue a goto do jednoho pytle a pletete si return a break, není slovíčkaření, ale upozornění na to, že tomu moc nerozumíte, takže ať se začátečníci od vašich rad raději drží dál. (Mírně pokročilí to upozornění nepotřebují, protože ti už to poznají sami.)

daemon

Re:Jak můžu opustit funkci
« Odpověď #23 kdy: 13. 07. 2018, 08:26:46 »
Skratka, veci ako break, continue, goto by sa mali pouzivat v stave najhorsej nudze.

Tam ten původní kód byl v C, předpokládám tedy, že se stále bavíme o C.
Vysvětlíš mi, jak bez použití break mám v C správně používat switch, case?

balki

Re:Jak můžu opustit funkci
« Odpověď #24 kdy: 13. 07. 2018, 08:52:14 »
Skratka, veci ako break, continue, goto by sa mali pouzivat v stave najhorsej nudze.

Tam ten původní kód byl v C, předpokládám tedy, že se stále bavíme o C.
Vysvětlíš mi, jak bez použití break mám v C správně používat switch, case?

Lebo zrovna ten pripad som mal na mysli...  Jeden je domyslavy, druhy nedomyslavy.

balki

Re:Jak můžu opustit funkci
« Odpověď #25 kdy: 13. 07. 2018, 08:54:07 »
Skratka, veci ako break, continue, goto by sa mali pouzivat v stave najhorsej nudze. Procedura by mala mat podla moznosti len jeden return.  To ze tu mate vystudovane hnojariny a potrebujete si honit ego a slovickarit, na tomto fakte nic nezmeni.
Ty vaše rady jsou dobré akorát v případě, kdy chcete psát špatný a nečitelný kód. Protože papouškujete rady, o nichž jste možná někde něco zaslechl, ale úplně jste je nepochopil.

V případě toho returnu ta rada ve skutečnosti zní, že procedura by měla mít jednu hlavní linku, ve které se řeší její výkonný kód, a tato hlavní linka by měla být přímo v těle té procedury. Tím, že je jedna, bude mít tedy i jeden return. Je to opatření právě proti tomu, aby v proceduře bylo několik vnořených velkých ifů, z nichž každý bude dělat něco jiného a bude mít svůj vlastní konec – taková procedura dělá mnoho věcí a je lepší jí rozdělit.

K tomu, aby bylo možné kód takhle napsat, se často používá technika, kdy na začátku procedury vyhodnotíte vstupní parametry, a teprve když je vše v pořádku, následuje vlastní výkonný kód. Když parametry v pořádku nejsou, opustíte proceduru hned – buď pomocí returnu, nebo v jiných jazycích také pomocí výjimek. Ostatně pravidlo „jediný výstupní bod procedury“ by jakýkoli smysl výjimek úplně pohřbilo.

Takže to vaše zkomolené pravidlo o jediném returnu je ve skutečnosti pravým opakem toho skutečného pravidla, které se programátorům doporučuje.

Upozornění na to, že házíte break, continue a goto do jednoho pytle a pletete si return a break, není slovíčkaření, ale upozornění na to, že tomu moc nerozumíte, takže ať se začátečníci od vašich rad raději drží dál. (Mírně pokročilí to upozornění nepotřebují, protože ti už to poznají sami.)

Takze dobre som pochopil, ze mate butthurt a velke ego. Normalne vidim tu vasu navretu zilku na cele.

balki

Re:Jak můžu opustit funkci
« Odpověď #26 kdy: 13. 07. 2018, 09:03:22 »
A vynimky nie su strukturovane programovanie, to je len goto na iny sposob, to je vam hadam jasne.  Tie je vhodne vcas odchytit (tie predvidatelne) a riadenie programu robit pomocou chybovych hodnot.

armabeton

Re:Jak můžu opustit funkci
« Odpověď #27 kdy: 13. 07. 2018, 09:12:37 »
`return` je ridici prikaz pro opusteni funkce (popr. vraceni hodnoty) a tak by se mel pouzivat. Davate tim jasne najevo, co se deje. Kdyz tam namisto toho bude cely zbytek tela funkce v if (opacna podminka) {}, tak jenom matete ctenare kodu, ktery ocekava, co se vlastne bude dit na konci toho bloku if - ma proste o jednu polozku v kontextu navic, i kdyz jasne vyjadrena myslenka if (nema_smysl_pokracovat) return; je cista a "kristalove jasna".

.

Re:Jak můžu opustit funkci
« Odpověď #28 kdy: 13. 07. 2018, 09:25:11 »
Navrhoval by som spravne pouzit strukturovane programovanie a vyhnut sa returnom a breakom uprostred procedury.
Mohl byste uvést konkrétní příklad, kdy může být v C break na konci procedury (a má tam nějaký smysl)?
Chtěl tím říci, že puristi místo

if (chyba)
    return;
/* zbytek kódu */

napíšou

if (!chyba) {
   /* zbytek kódu */
}

Ta upravená varianta zvyšuje cyklomatickou složitost zbytku kódu, takže v současnosti je to považováno za antipattern. Netuším, co je na tom puristického.

balki

Re:Jak můžu opustit funkci
« Odpověď #29 kdy: 13. 07. 2018, 09:32:31 »
`return` je ridici prikaz pro opusteni funkce (popr. vraceni hodnoty) a tak by se mel pouzivat. Davate tim jasne najevo, co se deje. Kdyz tam namisto toho bude cely zbytek tela funkce v if (opacna podminka) {}, tak jenom matete ctenare kodu, ktery ocekava, co se vlastne bude dit na konci toho bloku if - ma proste o jednu polozku v kontextu navic, i kdyz jasne vyjadrena myslenka if (nema_smysl_pokracovat) return; je cista a "kristalove jasna".

Dam takyto priklad zo zivota. Podo mnou robila jedna koderka juniorka uctovnictvo, bol som analytik.  Ja som jej zadal priznaky, podla ktorych sa mali generovat ucty z uctovnej osnovy.  Riadila to tiez takto returnami. Trochu upravila kod, jeden return sa nevykonal a suma skoncila na uplne inom ucte.  Ked si clovek nepomaha barlickami pre rozne synonyma goto, nuti ho to aj lepsie premyslat o kode - Tento if je dlhy? spravim procedury. If-y su zanorene? Premyslim, ako ich spravit flat. Je tam vela riadenia, ktore zavisi od typu dat? - upravim to inak v ramci moznosti jazyka.

(To ze jirsak robi design by contract cez returny a vynimky, to je ina vec. Su na to elegantnejsie nastroje, ale ak mu to zamestnavatel dovoli, tak preco nie ?)

Som zbytocne mravoucny, v skutocnosti je mi jedno, kto ako programuje, ked to nemusim po nom citat.