526
Vývoj / Re:Jak můžu opustit funkci
« kdy: 16. 07. 2018, 12:55:22 »
A uz slubujem, ze v tomto topicu na nic nereagujem, nech si napise kto chce, co che. Nepotrebujem krmit trollov. (Nemyslim konkretne vas)
Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
A uz slubujem, ze v tomto topicu na nic nereagujem, nech si napise kto chce, co che. Nepotrebujem krmit trollov. (Nemyslim konkretne vas)
Citacevynucováním blbostí jí akorát tak ublížíš
V puvodnim prispevku bylo: pokud mam nekde if, melo by mit i else. Laskavy ctenar si povsimne, ze je tam pouzity podminovaci zpusob slovesa mit. Aby to bylo jasne "melo by mit" != "musi mit".

CitaceZ wiki:Kód: [Vybrat]while (existují data k přečtení) {
načíst data;
...
}
zpracovat načtená data;
Tento kod je hlavne z podstaty spatny, protoze funkce nedela jednu vec, ale minimalne dve veci: nacteni dat a jejich zpracovani. Pokud ty ulohy rozdelis, kod se da zjednodusit a vystacis si s jednim vystupnim bodem a kdyz budes vedet jak na to, muzes se obejit i bez break.
[/quote]CitaceTak, že nebudu program větvit na 150 if/else, aby celá funkce končila jedním returnem.Pokud mas ve funkci 150 if/else, evidentne neco delas spatne. Ale zdraham se tu uvest stare dobre pravidlo, ze ve funkci by mely byt nanejvys tri nebo ctyri zanoreni if, for,... protoze nekterym by z toho mohla explodovat hlava.
Obvykle stačí dvě úrovně zanoření, když se else nepoužívá. Těch 150 if/else byla jistě nadsázka.
CitaceNo pokud jim radíš, že po ifu má být vždy else a return do ifu nepatří, tak jim akorát další starosti přidáváš.
Radim jim, jak kod udelat srozumitelnejsi, aby se v nem oni a lidi, co budou jejich kod cist, vyznali hned napoprve. Ale to neni vec pro frajery, jak jsem psal vcera.
CitaceTo ale @Kit neřekl.
Ale plyne to z toho.
CitaceMimo to, kolik začátečníků si hraje se zámky ?
Tak si misto zamek dopln: neuzavreny soubor, neuvolnene spojeni do databaze a souvisejici alokovane objekty, neuzavrene sitove spojeni. Opravdu to zacatecnici nepouzivaji?
Citace1) Strukturované programování je především o logické struktuře kódu, ne o nějakých pseudopravidlech.
A te struktury kodu dosahnes jak?
CitaceMimochodem If/Else mají také za následek skok, tak přemýšlím, jak rozbíjí strukturu kódu.
Ja jsem k autistum tolerantni, ale vest s nimi diskuze o nicem me nabavi.
CitaceO jaké struktuře kódu mluvíš?
Precti si neco o strukturovanem programovani, bude stacit wikipedie, urcite te to obohati.
Kód: [Vybrat]otevřít soubor;
while (existují data k přečtení) {
načíst data;
if (chyba) {
ukončit podprogram a informovat zbytek programu o chybě;
}
}
zpracovat načtená data;
konec podprogramu;
Výše je uvedena poměrně běžná situace, se kterou se můžeme vypořádat několika způsoby: vyhozením výjimky, předčasným (druhým) návratem z procedury a nebo třeba i příkazem skoku. Ve všech těchto případech má procedura dva výstupní body a porušuje tak principy „striktního“ strukturovaného programování. Na obhajobu tohoto přístupu však musíme říci, že přepsání této procedury v souladu s pravidlem jednoho výstupního bodu by bylo poměrně těžkopádné, nemluvě o tom, jaký chaos by v kódu vznikl, pokud by do hry vstoupilo více chybových stavů a každý se navíc musel ošetřit jiným způsobem.
Bylo by fajn, kdybys uvedl, jak bys řešil např. ten main. Člověk, který uměle vynucuje jeden return na konci funkce, i když to prasí čitelnost, tak je stejné pako jako ten, kdo používá return na každém rohu.
Pokud z nějaké knihovny obdržím návratový kód, tak ho mohu zpracovat, ale také ignorovat. Když tento kód převedu na výjimku, což zpravidla znamená vytvořit objekt, do kterého se uloží všechny potřebné informace o chybě, tak takový objekt není možné ignorovat. Jinak propadne až ven z aplikace a vypíše se, co bylo příčinou pádu.
Syntaxe je záměrně jiná, výsledek je naopak mnohem jednodušší. Neošetřuje se jednotlivě každá výjimka, ale celá skupina. Není tedy třeba se po každém provedení příkazu ptát, zda proběhl v pořádku, což způsobovalo dlouhé špagety. Místo toho se udělá sekvence příkazů, ve které se výjimky ošetří společně. Není ani potřebné, aby výjimka byla ošetřena v metodě, ve které vznikla - je to spíš nežádoucí právě kvůli zjednodušení.
CitaceZačátečník se takovým situacím nemá učit vyhýbat, ale má se je učit zvládat.
Zacatecnik ma obvykle mnohem jine starosti. Vetsinou je rad, ze kod splnuje zadani. Ver mi, v praci delam code review i pro hodne zacinajici programatory.
CitaceMinimálně 90 % funkcí nemá v takové situaci alokované žádné prostředky.
A pak je tech zbylych deset procent, kde se na to muze zapomenout a hned mas memory leak nebo neuvolneny zamek raz dva. Pokud pouziji tvuj odhad, tak deseti procentni riziko, ze neco nekde prehlednu je opravdu vysoke a neprijatelne.

CitaceTento přístup chápu, ale nepovažuji jej za správný.
To je tvuj nazor, ale bavime-li se o strukturovanem programovani, tak tam opravdu prikazy skoku (at uz jsou pojmenovany jakkoliv) nepatri, protoze tyto konstrukty rozbiji co? Strukturu kodu!
(...)
Při důsledném používání výjimek jsou stavy nepotřebné. Funkce vrací hodnotu. Procedura něco dělá, ale návratová hodnota je void. Místo chybových stavů se v obou případech použijí výjimky, které ten chybový stav popisují mnohem lépe, než pouhý návratový kód.
Ale toto je asi na trochu jinou diskusi (které se nebráním, ba naopak!), tady jsme trochu OT.
A uz slubujem, ze v tomto topicu na nic nereagujem, nech si napise kto chce, co che. Nepotrebujem krmit trollov. (Nemyslim konkretne vas)
Citacepokud na sebe odstavce navazují
Ano, navazuji, proto byly v puvodnim prispevku uvedeny za sebou.
CitaceNebo to máme chápat tak, že if s returnem je "nedomyšlené předčasné opuštění funkce"?
Ne, nemate. Vsimnete si, ze v dane vete bylo pouzito modalni sloveso "muze". Z toho plyne, ze ne kazde pouziti if s returnem je nedomyslene, ale pokud je, ma to opravdu neprijemne dusledky.
(...) k hezkemu strukturovanemu programovani return v if-u nepatri, a pokud mam nekde if, melo byt mit i else (...)
(...)
Bylo by vhodne naucit se vnimat veci v kontextu a ne jen jednotlive drobne useky. Vzdyt pisu:Citacehned ve druhem prispevku (a byl to vlastne duvod dotazu jako takoveho) jde videt, k cemu muze nedomyslene predcasne opusteni funkce returnem vest, tj. resource leaky, nedefinovane stavy, visici zamky...
A z vlastni zkusenosti muzu rict, ze zacinajici programatori opravdu maji problemy dusledky takoveho "vyskoceni" domyslet. Proto je lepsi, kdyz se takovym konstrukcim budou vyhybat, obzvlast, pokud maji problem zvladnout jazyk jako takovy.
CitaceAle vždyť toto je blbost. Proč by nemohl mít return v ifu?
Bylo by vhodne naucit se vnimat veci v kontextu a ne jen jednotlive drobne useky. Vzdyt pisu:Citacehned ve druhem prispevku (a byl to vlastne duvod dotazu jako takoveho) jde videt, k cemu muze nedomyslene predcasne opusteni funkce returnem vest, tj. resource leaky, nedefinovane stavy, visici zamky...
Ta diskuze je dojemna. Dotazujici se, evidentne zacatecnik, prijde s problemem se zakladnim konstruktem. A misto toho, aby se mu poradilo na urovni jeho schopnosti, tj. ze k hezkemu strukturovanemu programovani return v if-u nepatri, a pokud mam nekde if, melo byt mit i else (...)
if (argc < 2) {
return 1;
}
(...)
A break samostatně, bez switch, case, snad ani použít nelze. Resp. možná ano, nevím to, ale asi by mě nikdy nenapadlo, takovou věc udělat.
To neznamená, že to jednou dělat nebudeš. Ale pokud ti jde o pět minut kompilace, tak nemá smysl kupovat věci jako Optane a další.
Ty jsi borec. Skoro jako já, ale ne tolik. Smysl to má, pokud kompiluješ 5 minut 15x za den. A teď pokračuj a říkej mi, co má pro mě smysl, strašně se mi to líbí. Zatím si dojdu pro popcorn
Jim Jefferies - Společnost jako vlak (Society as a train)
https://youtu.be/cGktbsUQRQA
Líbilo se mi jak tam říká Ve jménu ničeho!
Nebo hůř, dalo by se diskutovat, zda právě domnělý ateismus nevede k ideologiím, k popírání přirozenosti člověka atd., tedy toho, co nám dnes dělá problémy.
To je pravá podstata. Ohlupovat ovečky a bojovat proti odpůrcům, kteří nejdou s námi.