Jak můžu opustit funkci

Kit

Re:Jak můžu opustit funkci
« Odpověď #75 kdy: 14. 07. 2018, 01:12:37 »
Viděl jsem jednu skutečně realtime aplikaci v C, která ze země řídí přistání letadel pomocí radarů a dalších senzorů. Pokud nejde o život, jde o ho*no. Před touto aplikací však mám respekt.

Take nieco by som si netrufol.  Alebo obsluha tazkych robotov, zdravotnicke zariadenia, jadrove elektrarne, tovarne. Kod z takych miest pre svoj klud radsej nechcem vidiet :)  Tipujem, ze sa tam programuje spajanim certifikovanych ciernych krabiciek (myslim modulov) :) A v tych certifikovanych moduloch nastane chyba max raz za 5 rokov a protichemicka jednotka to vycisti :)

Nakonec jsem do toho nešel právě kvůli tomu C. Prostě mi ten jazyk nesedí. Samozřejmě to nepíše jeden člověk a důsledně se dělá TDD, code review a další podceňované techniky vývoje. Kdyby to bylo ve Fortranu, tak by mi to vyhovovalo.


Radovan.

Re:Jak můžu opustit funkci
« Odpověď #76 kdy: 14. 07. 2018, 06:26:47 »
Tou korektnostou myslim to, ze program nespracuva zle vstupy, ale proste ich zahodi. (pripadne sa zjebe pri zlych vstupoch, to je ten horsi pripad)
K tomu doporučuji prostudovat knížečku "Programátorské poklesky" od Kopečka a Kučery. Stará ale dobrá, a jsou v ní krásně popsané kategorie programů podle jejich chování k uživateli a jeho datům :)

balki

Re:Jak můžu opustit funkci
« Odpověď #77 kdy: 14. 07. 2018, 07:22:30 »
Viděl jsem jednu skutečně realtime aplikaci v C, která ze země řídí přistání letadel pomocí radarů a dalších senzorů. Pokud nejde o život, jde o ho*no. Před touto aplikací však mám respekt.

Take nieco by som si netrufol.  Alebo obsluha tazkych robotov, zdravotnicke zariadenia, jadrove elektrarne, tovarne. Kod z takych miest pre svoj klud radsej nechcem vidiet :)  Tipujem, ze sa tam programuje spajanim certifikovanych ciernych krabiciek (myslim modulov) :) A v tych certifikovanych moduloch nastane chyba max raz za 5 rokov a protichemicka jednotka to vycisti :)

Nakonec jsem do toho nešel právě kvůli tomu C. Prostě mi ten jazyk nesedí. Samozřejmě to nepíše jeden člověk a důsledně se dělá TDD, code review a další podceňované techniky vývoje. Kdyby to bylo ve Fortranu, tak by mi to vyhovovalo.

TDD je frikulinsky agilny vymysel poslednych rokov, aby sme mali na co pri robote nadavat.  Ale budis, asi jo, v nejakej inej forme sa to tam asi robi.

balki

Re:Jak můžu opustit funkci
« Odpověď #78 kdy: 14. 07. 2018, 07:26:14 »
Tou korektnostou myslim to, ze program nespracuva zle vstupy, ale proste ich zahodi. (pripadne sa zjebe pri zlych vstupoch, to je ten horsi pripad)
K tomu doporučuji prostudovat knížečku "Programátorské poklesky" od Kopečka a Kučery. Stará ale dobrá, a jsou v ní krásně popsané kategorie programů podle jejich chování k uživateli a jeho datům :)

Dakujem za odporucenu literaturu. Bud sa v tej knihe budem smiat na pokleskoch, alebo schytam zachvaty paniky a budem chciet vsetko prekodit :)

Kiwi

Re:Jak můžu opustit funkci
« Odpověď #79 kdy: 14. 07. 2018, 09:49:44 »


Sten

Re:Jak můžu opustit funkci
« Odpověď #80 kdy: 14. 07. 2018, 10:29:57 »
Výjimky jsou zlo. C++ je zlo.

http://250bpm.com/blog:4
http://250bpm.com/blog:8

Ty výtky k výjimkám v tom prvním nějak nechápu. Výjimky jsou náhrada za návratové kódy v C a jejich řešení mimo funkci, když takový kód porovnáte, tak to vypadá velmi podobně, ale v C++ máte jasně rozděleno, co je chyba a co hodnota a navíc nepotřebujete desítky if (selhalo) { dealokuj(); return CHYBA; }, protože o to se postará překladač. Ke zpracování chyb v místě jejich vzniku je zbytečné používat výjimky.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Jak můžu opustit funkci
« Odpověď #81 kdy: 14. 07. 2018, 10:50:24 »
Výjimky jsou náhrada za návratové kódy v C

Vypíchl bych skutečnost, že výjimky jsou nutnou náhradou. V jazycích jako je C, Java, ale třeba i PHP, Javascript řešit příznak chyby návratovou hodnotou nejde - protože si tu návratovou hodnotu nemusíš vyzvednout.

Kit

Re:Jak můžu opustit funkci
« Odpověď #82 kdy: 14. 07. 2018, 11:17:10 »
Výjimky jsou zlo. C++ je zlo.

http://250bpm.com/blog:4
http://250bpm.com/blog:8

Koukám, že výjimky v C++ jsou skutečně zlo, zejména když je někdo použije tak hloupým způsobem, jako autor těch článků.

λ bender

Re:Jak můžu opustit funkci
« Odpověď #83 kdy: 14. 07. 2018, 11:51:51 »
Výjimky jsou zlo. C++ je zlo.
Výjimky se musí udělat tak, aby nebyly vidět. Jako například v Go, kde si většina myslí, že žádné nemá, i když na nich stojí velká část standardní knihovny.

LambdaBender

Re:Jak můžu opustit funkci
« Odpověď #84 kdy: 14. 07. 2018, 13:31:54 »
Viděl jsem jednu skutečně realtime aplikaci v C, která ze země řídí přistání letadel pomocí radarů a dalších senzorů. Pokud nejde o život, jde o ho*no. Před touto aplikací však mám respekt.

Take nieco by som si netrufol.  Alebo obsluha tazkych robotov, zdravotnicke zariadenia, jadrove elektrarne, tovarne. Kod z takych miest pre svoj klud radsej nechcem vidiet :)  Tipujem, ze sa tam programuje spajanim certifikovanych ciernych krabiciek (myslim modulov) :) A v tych certifikovanych moduloch nastane chyba max raz za 5 rokov a protichemicka jednotka to vycisti :)

Nakonec jsem do toho nešel právě kvůli tomu C. Prostě mi ten jazyk nesedí. Samozřejmě to nepíše jeden člověk a důsledně se dělá TDD, code review a další podceňované techniky vývoje. Kdyby to bylo ve Fortranu, tak by mi to vyhovovalo.

TDD je frikulinsky agilny vymysel poslednych rokov, aby sme mali na co pri robote nadavat.  Ale budis, asi jo, v nejakej inej forme sa to tam asi robi.
Kdo je Budiš?

Kit

Re:Jak můžu opustit funkci
« Odpověď #85 kdy: 14. 07. 2018, 13:42:17 »
TDD je frikulinsky agilny vymysel poslednych rokov, aby sme mali na co pri robote nadavat.  Ale budis, asi jo, v nejakej inej forme sa to tam asi robi.
Kdo je Budiš?

Nikoho jsem tam nebudil.

ded.kenedy

Re:Jak můžu opustit funkci
« Odpověď #86 kdy: 15. 07. 2018, 02:07:34 »
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, tak se mistni frajeri zacnout predhanet, kdo je vetsi machr a umi napsat vymakanejsi kod. PetrM s propadajicimi casy pochopitelne vyhrava.

Paradoxni je, ze hned 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...

Samozrejme, vetsina mistnich odborniku bude tvrdit, ze takove chyby se jim nikdy nestavaji, ale opak bude spis pravdou.

Re:Jak můžu opustit funkci
« Odpověď #87 kdy: 15. 07. 2018, 09:51:46 »
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 (...)

Ale vždyť toto je blbost. Proč by nemohl mít return v ifu? Zvlášť když je řeč o C?

Typicky

Kód: [Vybrat]
if (argc < 2) {
    return 1;
}

je pro začátečníka naprosto v pořádku, naopak je to dobrý návyk. (Samozřejmě lze použít err() a jiné, ale mluvíme o příkladu pro začátečníka).
Nějaká nutnost else je taky blbost.
« Poslední změna: 15. 07. 2018, 09:56:05 od Cikáda »

Kit

Re:Jak můžu opustit funkci
« Odpověď #88 kdy: 15. 07. 2018, 10:19:43 »
Typicky
Kód: [Vybrat]
if (argc < 2) {
    return 1;
}
je pro začátečníka naprosto v pořádku, naopak je to dobrý návyk. (Samozřejmě lze použít err() a jiné, ale mluvíme o příkladu pro začátečníka).
Nějaká nutnost else je taky blbost.

Přesně. Dnes se else používá ve funkcionálních jazycích u ternárních operací. Jinde postrádá na významu a jen znepřehledňuje kód. Return v podmíněném příkazu se už stal běžnou součástí, jeden výstupní bod podprogramu má význam snad už jen v Assembleru.

XSLT pro jistotu nemá else vůbec. Cykly a podmínky se v něm často vypouští také, jenže to je tak trochu jiný level.

Re:Jak můžu opustit funkci
« Odpověď #89 kdy: 15. 07. 2018, 10:22:02 »
Nevím jak obecně u funkcionálních, ale v Haskellu mám radši stráže a vzory než if/else :)