A C Programozók Tízparancsolata

A HupWiki-ből...

féligkész! (Félig tele, félig üres. Minden relatív)

A C Programozók Tízparancsolata

(Magyarázatokkal)

írta Henry Spencer, félig leferdítette Bocs, hátulról nekiment: Fraque

1 Néktek pedig mondom: gyakran futtassátok a lint-et és figyelmezzetek szavára, mert gyakran bölcsebbek a felismerései és ítéletei, mint a tieitek.

Azért mondják ma is: ez bölcs tanács, bár a legtöbb modern compiler igyekszik felfedni a legtöbb ilyen bűnt. Az emberek a lint-ben is találnak hibát: idegen vidéken néha nem áll rendelkezésre, elavult, vagy ítéleteiben bizonytalan. Használhatsz azért más eszközöket is, úgymint a Saber C-t, amik hasonlóan használnak néked.
A "gyakran" azt jelenti: tanácsát naponta kérd, ne csak reméld, hogy hirtelen bűnbánatod miatt kódod az utolsó napon megkapja majd a lint áldását. A lint ítéletének alávetni egy programot, amelyen még soha azelőtt futtaták azt: gyakran olyan tisztogatás ez, amit ellenségeidnek sem kívánnál. Megfigyelték azt is, hogy a lint szavára figyelmezés nagy segítséget jelenthet debuggolásnál is.
"Figyelmezni szavára" nem azt jelenti, hogy a lint output minden byte-ját el kell törölni értelem nélkül - hiszen néha nem is lehetséges tanácsait elnémítani -, de mindig tudni kell boldogtalanságának okát, és érteni kell, mi az a dolog, ami felől aggodalmaskodik.


2 Ne kövesd a NULL pointer-t, annak vége pusztulás lesz és téged őrültségbe visz.

A szent iratok másolása közben itt nyilvánvalólag hiba történt, hiszen "null pointer"-t kellett volna írni, hogy jobban elváljon egymástól a null pointer fogalma és a NULL makró (ez utóbbiról majd később). Ettől eltekintve a parancsolat jelentése világos. A null pointer olyan területre mutat, ami szörnyetegek, démonok, core dump-ok és más lelkes állatok lakóhelye; ezek aztán kéjjel támadnak majd programodra, mikor megzavarod szendergésüket. A null pointer nem mutat semmilyen típusú 0 értékre, pediglen látánk már olyan káromló kódot, ami bűnös módon ezt feltételezte.


3 A függvények minden argumentumát a megfelelő típusúra kényszerítsed át, ha még nem az elvárt típusúak, még akkor is, ha meg vagy győződve ennek szükségtelen mivoltáról; máskülönben szörnyű büntetésük utolér tégedet, éppen amikor a legkevésbé várnád.

A programozónak ismernie kell nyelve típusait, máskülönben szerencsétlen lesz az ő útaiban. Szemben azzal az istentelenséggel, amit néhány Nyugati Parton lakó ember mond, az 'int' és a 'long' nem ugyanazon típusok. Rövid az az idő, amíg egyenlő a mivoltuk, és a felcserélhetőségükben hívőkre az örök kárhozat vár majd, amikor a 64 bites gépek jobban elterjednek.
Továbbá, a Keleti Síkság fejletlenebb lakói is tévedésben vannak, hiszen a 'NULL' nem pointer típusú, és feltétlenül a megfelelő típusúvá kell kényszeríteni, amikor is függvény argumentumként akarják használni.
(Nagy prófétánk, ANSI szavait, amelyben megengedte, hogy a NULL érték típusa 'void *' legyen, gyakran környezetéből kiragadják és félreértik. A próféta felmentése csak vad vidékeken, nagy szükség idején érvényes. Bizony mondom néktek, minden igaz programnak át kell mennie a Típusok Sűrű Erdején úgy, hogy közben nem támaszkodik erre a ritkán elérhető felmentésre, rest módon, mondván, hogy az majd megoldja minden gondját. Bármiképp legyen is, Dmr, a nagy istenség, aki a C-t alkotta, nagy bölcsen ellátta azt sokféle pointerrel, nem csak egyfajtával, ezért úgyis szükséges, hogy a próféta NULL-ját a kívánt típussá kényszerítsed.)
Először is, azt hihetnénk, hogy az új áldás, a 'prototípusok' szükségtelenné teszik az argumentum típusok körüli óvatosságot. Ne gondoljátok így, testvéreim. Amikor először kerülsz szembe a változó számú argumentumot váró függvényekkel, a baj ismét jelentkezni fog... és akinek hitét nem edzette meg a sokszor megismételt szertartás, biztosan elbukik majd eme gonosz csapdán.
Másodszor, a bölcsek megfigyelték, hogy a prototípusokra hagyatkozás sok-sok furcsa hiba lehetőségét hozta elő. Sokan azt remélték, hogy a prototípusokat hibakeresési céllal hozzák létre, és nem okoznak majd implicit típus átalakításokat.
Végül, a prototípusokra hagyatkozás valós környezetben ma sok gondot okoz, hiszen sokan még pusztán megszokásból vagy kényszerűségből ragaszkodnak a régi módszerekhez és a régi fordítóprogramokhoz, és senki emberfia nem tudja, hogy hamarosan milyen gépen kell futtatni a programot.


4 Ha a header fájlokban a könyvtári függvényeid visszatérési értékei hiányoznak, azokat a lehető legnagyobb gondossággal pótoljad; máskülönben programod szörnyű kínok közt vergődik majd.

Ansi próféta, az ő bölcsességében hozzátette, hogy nógasd a te Beszállítóidat, s kiátkozás terhe mellett követeld, hogy header-jeik megnevezzék a könyvtári függvényeket. Bizony, csakis ők a tudói a megfelelő igéknek, melyekkel csodájuk a legjobb úton hívható.
A próféta később hozzátette, hogy balgaság, s a kárhozatnak s rejtek hibáknak bugyraiba vezet ilyes függvényeket magadnak megnevezned, ha header-jeid ezt rendben megteszik.


5 Gondoskodjál valamennyi karakterfüzér hosszának ellenőrzéséről (és másfajta tömböknél is), mert nem tudhatod, mely órában jő el a felhasználó, aki a "test" szó helyett az "elkáposztástalaníthatatlanságoskodásaitokért" szót fogja megadni.

A mint a Nagy Féreg gaztettei mutatják, a parancsolat folyománya, hogy megbízható alkalmazás sosem használja a gets()-t, mert az bizony a Fenevad szerszáma. Interface-eid mindig tudassák tömbjeid határait a te szolgáiddal, s a szolgák, kik a tanácsot meg nem szívelik, avagy csendben máshogy cselekszenek, rögvest űzessenek Rm Földjére, hol néked többet nem árthatnak.


6 Ha meghirdettetett egy függvényről, hogy bajában hibakódot ad vissza, akkor azt vizsgáljad meg jól, bizony még akkor is, ha így kódod mérete háromszorosára növekszik és fájdalom költözik be gépelő ujjaidba; még akkor is, ha azt gondolád: "velem nem eshet meg ily dolog", mert az istenek biztosan megbüntetnek elbizakodottságodért.

Az igaz hívők jobb hibakezelési módszereket áhítanak, mivel a visszatérési értékek közvetlen figyelése a végletekig fárasztó, s nagy a kísértés elhagyni azt. De addig a távoli napig, míg a megváltás eljő, türelemmel és nagy gonddal kell járnod eme hosszú és kanyargós ösvényt, mivel Forgalmazód, Gépezeted és Programod külön örömét leli a meglepetésekben, s neki semmiség épphogy értelmetlen eredményeket visszaadni a te Diplomavédésednek, avagy Ügyfelednél Való Terítésednek napján.
Ritkán ugyan, de például a stdio ferror() lehetőségével, alkalom nyílik a hibafigyelést a legvégsőkig halasztani, amikor is egy összesített eredményt vizsgálhatunk, s ez gyakran hoz rövidebb és olvashatóbb programot. Úgyszintén, még a legbuzgóbb hívő is ítélkezzék ama függvények felett, melyek visszatérési értéke érdektelen, de vigyázz, a void-ra kénszerítés kétélű kard, mely önnön véredet is bánat nélkül ontja.


7 Öregbítsed a tanulságodat a függvénykönyvtárakban, és ne akarjad azokat újra feltalálni komoly ok nélkül; így kódod rövid és olvasható lészen, napjaid pedig örömben és termékeny munkában telnek majd.

Számtalanul vannak a tisztátalanok, kik függvénykönyvtáraikat mindenféle ostoba és hamis vádakkal illetik, például a Hatékonyság Pléhkrisztusának vaksi követői. Igaz ugyan, hogy a C függvénykönyvtárak bizonyos részletei oktalanok, általában véve mégis előnyösebb mások munkájára építeni, mint újból feltalálni a négyszögű kereket. De a legnagyobb gonddal kövesd, a könyvtáraid mit ígérnek, s mit nem, nehogy olyasmire alapozz, mely kicsúszhat alólad.


8 Használd az Egy Igaz Zárójelezési Stílust, hogy programod szándékát és szerkezetét felebarátaid előtt világossá tegyed, még akkor is, ha nem szenvedheted; tehetséged gyümölcse inkább problémák megoldása legyen, semmint a megértés elé állított újabb, gyönyörű korlát.

E szavak, fájdalom, bizonytalanságot okoznak az újoncak s megtértek között, a kik a tudásnak nem tudói. Az a bizonyos Egy Igaz Zárójelezési Stílus ez, mit az Első Próféták, Kernighan és Ritchie gyakoroltak. Gyakran, s újfent becsmérlik a tudatlanok, híván nehézkesnek, noha mindössze elsajátítani nehéz kissé, minekutána csodásan egyszerű és nyilvánvaló, mégha érzékeny is kissé a hibákra.
Noha azt gondolnád, a saját kútfődből vett zárjelezési stílus kecses programmak forrása leszen, az eljövendők azt meg nem köszönik, hanem műved káromolják s neved átkozzák majd, s szavaik tán leendő munkaadód fülébe jutnak. Számos szokás van a világon, hogy egyezmény révén súrlódásainkat tompítsa, a munkánkat előrevigye, jóval kevésbé lényeges, hogy ezek a legjobb megoldást követik-e. Így van ez a zárójelek tekintetében is.
FixMe As a lamentable side issue, there has been some unrest from the fanatics of the Pronoun Gestapo over the use of the word ``man in this Commandment, for they believe that great efforts and loud shouting devoted to the ritual purification of the language will somehow redound to the benefit of the downtrodden (whose real and grievous woes tendeth to get lost amidst all that thunder and fury). When preaching the gospel to the narrow of mind and short of temper, the word ``creature may be substituted as a suitable pseudoBiblical term free of the taint of Political Incorrectness.


9 Külső azonosítóid különbözőek legyenek az első hat karakterük által, bár e szigorú rendelés teljesítése sok fáradsággal jár és szükségének évei előtted vég nélkül valók, hogy ne tépessék hajad és meg ne kergülj ama napon, mikor kisarjad a végzet és programodat egy régi rendszeren is futtatni akarod.

Kiáltsák bár az elvakultak: "Nem úgy! ímhol az Évezred, e mondás pedig avítt és támogatni azt nincs szükség.", bizony mondom, a világ telis-teli ódon rendszerekkel, a rettegett Murphy isten rendelése szerint tán épp ilyesfélén lesz következő alkalmazásod. Amíg te alszol, ő ellened tervel, ébredj hát és figyelmezz.
Vésd eszedbe, hogy azonosítóid hossza nem csak bezárólag hat karakter lehet. Az ige mindössze az első hat különbözőségét rendeli. Nem olyan nehéz ez, mint a kicsinylők állítják.


10 Légy gondolattal, szóval és tettel a hitvány eretnekség ellen, a mi úgymond: "VAX az egész világ", ne közösködjél a tudatlan pogányokkal, kik ragaszkodnak eme barbár hithez; emígy, legyenek bár megszámlálva ma használt géped napjai, programod élete hosszú leszen.

Eme eretnekség mintegy kívánja, hogy helyette "Sun az egész világ", avagy "386-os az egész világ" mondassék (ez utóbbi a Sátán különösen gyomorforgató találmánya), ám a parancsolat béfoglalólag áll mindilyesmire. Kiváltképp óvakodj a "32 bites az egész világ" búvó iszonyától, mely ma épphogy igaz, de megszűnik az lenni, még mielőtt önéletírásod gyarapíthatnád.