C while for..for....for

Miroslav Šinko sinkomiro na gmail.com
Čtvrtek Leden 26 23:50:49 CET 2023


Konkretne toto by som urcite riesil funkciou, ktoru by som patricne 
zrozumitelne pomenoval a vstupmi by mohli byt 4 pointery (v C++ 
referencie) na indexy. Funkcia v tom najvnutornejsom cykle, ak najde, 
naplni hodnoty svojich premenych cyklov cez tie pointery a vrati napr. 1 
(ako true, apod.). Ak cykly prebehnu bez najdenia vysledku bude return 0 
(ako false). Aj vo vasom kode musite na konci vsetkych cyklov nejako 
rozlisit, ci sa naslo, alebo nie. Takto je to myslim prehladnejsi kod. V 
mieste volania mate 1 volanie a 1 if (pripadne v if-e to volanie, co 
zase ja nerad kombinujem).

Vyhodu goto vidim inde. Ked mam funkciu, ktora postupne vyhodnocuje vela 
podmienok, tak pri "false" je vyhodne pouzit goto end; a na tom konci 
mat spolocne uvolnenie alokovanych buffrov, nejaky vypis do logu apod - 
vsetko toto len raz, na jednom mieste - na konci funkcie.
Konkretny priklad je, ze proces do funkcie obdrzi netrivialny buffer s 
datami, ktore su organizovane do nejakych packetov, TLV apod.. T.j. musi 
tie pakety vyhladat, v kazdom posudit nejake hodnoty a az ked ma vsetko, 
tak s tymi hodnotami nieco rozumne urobi. T.j. ak sa hociktory paket 
nenajde, alebo hodnoty v nom nesedia, nema zmysel pokracovat dalej.
Da sa to bez goto, kde budem mat if-y povnarane a kod budem mat odsadeny 
kdesi za pravym okrajom obrazovky. Jednoduchsie je ist linearne... 
if(...false) goto end; Nepotrebujem else, ale kod pokracuje rovno bez 
odsadenia volanim dalsej povedzme vyhladavacej funkcie na dalsi paket, atd.

miro


On 26.1.2023 23:28, Aleš Procháska wrote:
> Přehlednost kódu pro případné další úpravy je myslím skoro stejně důležitá jako správnost a když rozstrkám do funkcí to, co přirozeně nevyjadřuje nějakou myšlenku, přehlednosti moc nepomůžu. Zcela konkrétní příklad (reálně naprogramovaný a taky s goto): najít čtveřici ozubených kol, která budou realizovat určitý převod. Je to komplikované tím, že se vyrábějí pouze kola s celočíselným počtem zubů, takže se musí zkusmo procházet ve čtyřech vnořených cyklech až se trefím. Pak goto za konec vnějšího cyklu a mám čtyři indexy označující čtyři hledaná kola. Kdybych na to psal nějakou ad hoc funkci kterou už v programu nikde jinde nepoužiju, tak musím taky vyřešit, jak vrátit čtveřici čísel. Čili nějaký struct nebo co, ještě ta funkce a z pár řádků jsou dvě obrazovky a tušené nadávky někoho (mě samého za rok) kdo se bude snažit pochopit co to vlastně dělá. Kdybych už v tom nutně musel hledat hnidy, tak bych se začal navážet do samotného céčka, proč řídicí proměnné cyklu for existují i mimo tělo cyklu a proč tam není pojmenovaný exit z cyklu :-)
> 
> Aleš Procháska
> 
> 
> Od: Hw-list <hw-list-bounces na list.hw.cz> za uživatele Jindroush <jindroush na seznam.cz>
>   
> Pocet radku / znaku / apod neni meritkem 'kvality' kodu - jsou dnes naprosto irelevantni. Dulezita je jen pochopitelnost a udrzitelnost kodu. A ctyri vnorene smycky s goto urcite nejsou ani jedno z toho.
> 
> J.
> _______________________________________________
> 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