ukazkove zdrojaky

Jan Kasprzak kas na fi.muni.cz
Pondělí Březen 6 13:30:36 CET 2006


Jan Markus wrote:
: Nicmene, aby nam ten plaminek az tak rychle nedoplapolal... kod, ktery
: jste oznacil navestim "Bleee" se _me osobne_ cte lepe nez ten s temi
: tabelatory. Zvlaste kdyz se to cele "roztrha" nejakymi komentari a
: volanim "dlouhych" funkci se zalomenim parametru, tak me oci musi po
: opusteni konce jednoho radku urazit dlouhou cestu kamsi doprostred
: stranky (malinko prehanim) aby nahmataly zacatek radku dalsiho. A pak
: se casto ztracim.

	Asi dejte priklad (necitite-li se jeste off-topic :-). Nejak si to
nedokazu predstavit. Cilem odsazovani je, aby clovek mohl videt zacatky
a konce bloku (a tedy si udelat predstavu o kodu na vyssi urovni) prohlizenim
_leveho_ okraje textu. Pokud uz ctu cele radky (zminovane dlouhe parametry
funkce atd), tak proste ctu po radcich a celkova struktura me moc nezajima.
No a zacatek dalsiho radku najdu snadno - je to prvni nebily znak na dalsim
radku :-).

	V teto souvislosti: jiz zminovany Damian Conway doporucuje jednu
zajimavou vec, ktera taky zvysuje citelnost: z matematiky je clovek
zvykly zalamovat radky _za_ operatorem, aby bylo jasne ze radek jeste
pokracuje:

	if (je_dneska_dost_hezky() && pocet_zlutych_bagru * teplota +
			pocet_jablek * pocet_hrusek > 10) {

ve skutecnosti ale kdyz uz ten radek ctete, tak neuzavrenou zavorku ifu
detekujete docela snadno - horsi je to kdyz jen tak letite ocima po levem
okraji textu - pak neni jasne, jestli ten "pocet_jablek" uz je prikaz
uvnitr ifu nebo ne. Cili v tom pripade je pro kod lepsi - na rozdil od
matematiky - zalamovat _pred_ operatorem:

	if (je_dneska_dost_hezky() && pocet_zlutych_bagru * teplota
			+ pocet_jablek * pocet_hrusek > 10) {

protoze takto je zejmena pri _zbeznem_ pohledu jasne uplne hned, ze druhy
radek neni jeste prikaz, ale soucast podminky.

: a flame pokracuje... Souhlasim, ze kod by mel sam "rikat co dela" a
: upravy rozsahlych komentaru jsou casto zanedbavany... nicmene, pokud
: je projekt rozdelen do mnoha souboru (zdrojovych, hlavickovych) a
: nazvy funkci & promennych nejsou "vycerpavajici", pak je pro mne
: vyhodnejsi komentar nad volanim funce s X parametry, ktery mi prozradi
: "co to udela a k cemu to je" nez hledani dalsiho souboru, v nemz je ta
: funkce nadefinovana.

	Asi zase nerozumim. Co funkce dela ma rikat jeji jmeno a nazvy
parametru. Kratky komentar uvnitr tela funkce muze mit svuj vyznam,
ale fakt jen kdyz zrovna delate neco specialniho, napriklad pouzivate
nejakou velmi obecnou funkci, ale posilate do ni specialni parametry
tak, ze vysledkem je neco velmi jednoducheho (napada me takovy asi blby
priklad - poslat ve funkci pro nasobeni matic nejake velmi specialni
matice - jednotkove, diagonalni - za ucelem dosazeni nejake operace, ktera
by jinak vyzadovala zvlastni funkci). Urcite by ale ten komentar nemel
popisovat obecne, jak ta funkce pracuje. Tohle se fakt brzo rozejde
s realitou a pak mate problem.

: Samozrejme predpokladem je, ze programator neni lajdak a nezanedbava
: ty upravy komentaru. Ovsem vyjma pana Stallmana je takovy programator
: pouhou iluzi ;)

	Prave. Programovaci styl je treba navrhovat tak, aby pokud mozno
po programatorovi vyzadoval co nejmene prace, a pritom v ramci moznosti
zajistoval citelny a udrzovatelny kod.

: Ale abych vcas unikl rozvasnenym davum... Pravda je, ze jsem puvodni
: dotaz neformuloval nejlepe. Neslo mi ani tak o ukazky spravneho
: formatovani, jako o ukazky spravneho reseni ruznych standardnich orisku:
: -vyhodnocovani parametru predavanych programu

	Zalezi jestli jste v situaci, kdy volajicimu duverujete nebo ne.
Je zbytecne vse testovat vickrat. V kernelu Linuxu se treba dela to,
ze jsou dve funkce - jedna s testovanim parametru/zamykanim/atd. a druha
bez. Ta bez testovani parametru ma obvykle jmeno zacinajici dvema
podtrzitky - treba __brelse()/brelse(), alloc_skb()/__alloc_skb(), atd.

: -jak bezpecne zachazet s retezci znaku

	bezpecne. :-)

: -pokud beru do jedne ruky malloc() mel bych v druhe drzet free()

	Neni uplne nutne u programu ktere bezi omezenou dobu (ale samozrejme
je dobre vedet co delam a malloc() bez free() pouzit opravdu jen kdyz
to chci). Hmm, nebo pouzit alloca().

: -jak vytvaret soubory v o+w adresarich (/tmp) a proc se tomu vyhybat

	Proc se vyhybat asi neni duvod - kdyz program nekdo zabije,
tak v /tmp mate zadarmo mazani pozustalych soyuboru. Jak pouzivat
- pouzit mkstemp(3).

-Y.

-- 
| Jan "Yenya" Kasprzak  <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839      Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/    Journal: http://www.fi.muni.cz/~kas/blog/ |
> Specs are a basis for _talking_about_ things. But they are _not_ a basis <
> for implementing software.                              --Linus Torvalds <


Další informace o konferenci Linux