ceckovy kviz 2 (hardcore)

Petr Labaj labaj na volny.cz
Čtvrtek Září 7 02:36:44 CEST 2023


Souhlas.
Nějaká skákání doprostřed bloků před else (jak tady bylo zmiňováno) 
jistě není to pravé.
Ale při ošetření různých speciálních stavů často dokáže goto výrazně 
zpřehlednit a zjednodušit kód.

Nějaké to nadávání na C často vychází z nepravdivé premisy, že protože 
jazyk umožňuje i krkolomné konstrukce, tak je programátor musí používat.
Ale to není pravda. Že jazyk něco umožňuje přece neznamená, že to 
využívat musím.
Čitelnost a štábní kultura závisí v neprosté většině na programátorovi, 
ne na jazyku.
(samozřejmě v výjimkou toho, když jazyk vyžaduje takovou kravinu, jako 
je psaní textových oddělovačů bloků begin a end ;-) )

PL

*******************

Dne 7.9.2023 v 2:07 Miroslav Šinko napsal(a):
> 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


Další informace o konferenci Hw-list