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