ceckovy kviz 2 (hardcore)

Aleš Procháska ales.prochaska na divesoft.com
Čtvrtek Září 7 12:48:24 CEST 2023


Já taky říkám, že jedno správné GOTO je strukturovanější než celá hromada if-ů :-) Samozřejmě se musí použít na skok ven ze struktury, čili fakticky jako obejití absence výjimek v některých jazycích, případně jako "break" z vnořeného cyklu.

BTW, třeba Ada na tohle má přímo konstrukci "exit [jméno] when podmínka". Cyklus se dá pojmenovat a pak se dá vyskočit i z vnořeného cyklu.

Aleš Procháska

>-----Original Message-----
>From: Hw-list <hw-list-bounces na list.hw.cz> On Behalf Of Miroslav Šinko
>Sent: Thursday, 07 September, 2023 02:07
>To: hw-list na list.hw.cz
>Subject: Re: ceckovy kviz 2 (hardcore)
>
>On 6.9.2023 18:33, Jan Waclawek wrote:
>> Na druhej strane to goto je skutocne svinstvo
>
>S tymto zas uplne nesuhlasim. Je to svinstvo, ked sa pouziva v algoritmoch, to
>absolutne nepouzivam. Ale na osetrovanie podmienok a skok vylucne na
>"upratovaci" koniec funkcie je vyhodne ho pouzit. To aj robime a dokonca to
>doporucujeme novym kolegom. Vedie to k eliminacii chyb (memory leakov) a
>jednoduchsiemu kodu. Pisem o cistom C, nie C++, kde su moznosti ine.
>
>Majme (s cim sa stretavame vo vacsine nasich kodov) funkciu na prijem dat,
>ktora musi zistit stav spracovania, ak ok, zistit velkost prijatych dat, ak ok,
>alokovat data buffer, ak ok, vycitat data do buffra, ak ok, zavolat parsovaciu
>funkciu, ktora vytvori (alokuje) prehladavaciu tabulku, ak ok, vyhladat record,
>ak ok, pripadne alokovat buffer na response data k danemu recordu, ak ok, to
>iste s dalsim recordom, a s dalsim, a s dalsim, atd...
>
>Mozme urobit sekvenciu ifov a elsov, pekne poodsadzovanu az za pravy okraj
>monitora. V kazdom jednom else uvolnit buffre, ktore boli dovtedy
>alokovane, t.j. co dalsie else, to kopia predosleho kodu + riadok navyse.
>Alebo mozme urobit sadu funkcii, do ktorych budeme predavat vzdy o jeden
>parameter viac. Alebo mat jednu free funkciu, kde predame vsetky pointery
>na buffre, ta bude volana X-krat a odsadzovanie az za okraj monitora aj tak
>ostane.
>
>No, alebo mozme pisat len ify na negativny vysledok, v nom jeden riadok
>log(..prislusny error..) a druhy riadok goto _end;
>
>A pred koncom funkcie mat navestie _end:, za ktorym je spolocny kod, ktory
>sa vykona, aj ked vsetko zbehlo spravne, v zmysle:
>if(data != NULL)
>{
>   free(data);
>}
>if(searchTable != NULL)
>{
>   free(searchTable);
>}
>if(recordX != NULL)
>{
>   free(recordX);
>}
>atd..
>
>Vsetky pointery na alokovane buffre su samozrejme na zaciatku inicializovane
>na NULL. To je dalsi best practice, mat vsetky premenne inicializovane.
>
>miro
>_______________________________________________
>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