goto considered harmful; was: ceckovy kviz 2 (hardcore)
Miroslav Šinko
sinkomiro na gmail.com
Pátek Září 8 10:11:31 CEST 2023
Ano vsimol. Ten moj kolega nenapise nic a potom sa ostatni divime...
Ja sa inac nehadam, len popisujem, co sa mi paci a co nie, bez toho, aby
som ocakaval, ze to rovnako budu pouzivat ini :)
V praci mame pravidla na pisanie kodu, nieco v nich je, nieco nie je. A
su tam aj historicke veci, ktore vedome ignorujeme. Napr. prikaz pisat
len blokove komentare, kedze // povodne C nepoznalo. Je fakt, ze tie
pravidla su riadne stare, nik sa nema k tomu ich zrevidovat. Tiez vobec
nemyslia na C++, ktore vo vacsej, ci mensej miere pouzivame. Ako kto..
pridu mladi kolegovia, pouzivaju zapisy z C++14, prip. aj vyssieho a my
dinosauri len cumime. Nastastie sa s tym nestretam na projektoch, ktore
robim.
Technicky, v pravidlach napriklad mame (z toho, co tu odznelo) a kde je
vyzadovane dodrziavanie:
-kazda premenna musi byt inicializovana
-blokove zatvorky {} sa podpisuju pod seba na samostatnom riadku pod
zaciatkom klucoveho slova
if()
{
...
}
-goto sa moze vylucne pouzit na skok na koniec funkcie, kde sa upratuje
-0 warnings na najvyssom leveli so zakazom potlacat specificke warningy
globalne a lokalne len v bezpecnych a oddovodnenych pripadoch
-hardcoded hodnoty v kode len vynimocne, kde je uplne zrejmy vyznam.
Napr. while(1) je zrejme, ale aj tak by sme radsej napisali while(TRUE),
keby sme namiesto toho nepouzivali for(;;)
Naopak, nie je zakaz pouzit do{}while(0); :)
miro
On 08.09.2023 09:08, Jan Waclawek wrote:
> A ten komentar si si tam vsimol? Ten je u mna povinnou a neoodelitelnou
> sucastou tej konstrukcie... :-)
>
> Inak, dospel som k tomu cez presne tu istu metodu ako spomenul pan kolega
> Buchta, t.j. pouzit funkciu a return. A uplne presne ako to pise, aj mne
> na tom vadila ta nemoznost upratat, preto som si vymyslel ten
> do-break-while(0).
>
> Ja nie som dogmatik a v mojich programoch goto najdes, je to na dlhu
> diskusiu a kazdy jednotlivy pripad si dlho sam sebe odovodnujem (kym
> neodisiel jeden moj kolega, viedli sme na tuto temu velmi rozsiahle
> diskusie, so snahou najst vsetky tie spravne argumenty pre a proti). Pre
> tento konkretny pripad som si riesenie nasiel a pokladam ho za lepsie nez
> goto.
>
> wek
>
>
> PS. A samozrejme existuje jediny spravny sposob odsadzovania, ma to v mene,
> One True Style
> https://en.wikipedia.org/wiki/Indentation_style#Variant:_1TBS_(OTBS) ; a
> na rozdiel od pseudoargumentov "vsetci to tak robia", "je to z K&R", a
> "mne sa to tak paci", ja mam pre neho skutocne argumenty:
> - blok je vizualne vertikalne priradeny jemu prisluchajucemu riadiacemu
> vyrazu
> - blok je vizualne vertikalne odsadeny od nasledujuceho prikazu
> - vodorovne odsadenie zatvaracej zatvorky na uroven riadiaceho prikazu je
> hierarchicky konzistentne aj vizualne zvyraznene, co je dolezite najma
> pripade '} while()' v do-while a aj v pripade '} else {' (ak by tieto
> pripady neexistovali, zatvaracia zatvorka vodorovne zarovnana s blokom by
> bola akceptovatelna, tento argument to zamieta a konzistentnost je
> dolezita)
> - oproti K&R sa vertikalne usetri jeden riadok, a je dolezite mat co
> najviac programu v pozorovacom okne cloveka
>
>
>
> ----- Original Message ---------------
>
> Subject: Re: goto considered harmful; was: ceckovy kviz 2 (hardcore)
> From: Miroslav Šinko <sinkomiro na gmail.com>
> Date: Fri, 8 Sep 2023 08:19:18 +0200
> To: hw-list na list.hw.cz
>
> Precitam.
>
> Presne taketo do{}while(0); pouziva jeden kolega aj na miestach niekde v
> strede funkcie na osetrenie 2-3 ifov. Ked po nom citam kod, vzdy ma
> stoji cas prist na to, naco do<> tam potrebuje cyklus?! Kym pochopim, ze
> na konci je while(0). Mne sa to skratka nepaci - pouzivat konstrukciu
> cyklu tam, kde nepatri.
>
> miro
>
> On 07.09.2023 21:56, Jan Waclawek wrote:
>>>> Na druhej strane to goto je skutocne svinstvo
>>> S tymto zas uplne nesuhlasim.
>>
>> Precitaj si toho Dijkstru. Bohuzial, nie je to klasicke rucne pisane EWD
>> ale je pisane na stroji (asi lebo EWD ho posielal do casopisu); ale pointa
>> je, ze kym EWD goto zavrhol ako hruby a problematicky nastroj, vobec
>> neodmieta myslienku hladania lepsich foriem riadenia toku programu.
>>
>> Ja pouzivam
>>
>> do { // only to be breakable
>> blahblah1;
>> if (don't want to continue) break;
>> blahblah2;
>> if (don't want to continue) break;
>> blahblah3;
>> } while(0);
>>
>> wek
>>
>>
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list