Na FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!
Vytvořit web zdarmaNa FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!
Vytvořit web zdarma"To u je tak sloit, e se v tom vbec nevyznm!"
Touhle nebo podobnou vtou programtor piznv kapitulaci. Jestli mluv o programu, kter po nkom pebral, m to aspo na koho svst, ale jestli ho psal od zatku sm, je to ostuda. V nsledujcm textu se pokusm shrnout pr obecnch doporuen a pklad, jak se podobnm problmm vyhnout.
Ideln situace vypad tak, e zante "na zelen louce" s przdnm PLC a clov stav je sprvn fungujc stroj, ke ktermu u se nikdy nemuste vracet a opravovat chyby. Praxe asto vypad trochu jinak: nkdy zante s prastarou mainou, kterou je poteba "jenom trochu upravit" (pokud mono za plnho provozu), jindy si zkaznk teba za rok vzpomene, e by chtl doprogramovat novou funkci nebo zmnit vrobn postup. Srozumitelnost kdu m potom naprosto zsadn vliv na to, za jak dlouho prci stihnete, a rozdl me bt klidn i nkolik d (minuty vs. dny).
Tohle je ze veho nejdleitj vc, proto ji pu hned na zatek. Dal odstavce ji vcemn jenom rozebraj z rznch hl. (Nezvisle napsan srie lnk Um pojmenovat promnn? na Itnetworku m o nkolik let pedbhla s datem vydn. Aspo je vidt, e nejsem jedin, kdo tenhle styl doporuuje.)
Kdy se promnn jmenuje D, nic moc nm to neekne. Kdy se jmenuje Diry, pod jet nen pln jasn, k emu pesn slou (na prvn pohled bych tipoval nejsp pole informac o njakch drch). A PocetDer u dv jednoznan smysl. Vyplat se pst jmna tak, aby z nich bylo poznat, co znamenaj: CisloProgramu, PocetReceptur, Dil1Zalozen, MotorHlasiChybu a podobn.
Pst vceslovn nzvy dohromadybezodlienslov nen moc pehledn, tak se na to pouv nkolik rznch styl. Tzv. pascal case (VechnaPrvnPsmenaVelk) a camel case (prvnMalOstatnVelk) se hod pro jazyky, kter nerozliuj velikost psmen v identifiktorech (pascal, ST atd.): pokud se spletete a zapomenete zmknout Shift, nevad to, je to pod to sam. Kde se velikost rozliuje (C a jemu podobn), tam si to bu muste hodn dobe hldat, nebo pouvat snake case (vechno_malmi_oddlovno_podtrtky, viz nap. PHP). Slova-oddlen-pomlkami pouv snad jedin Cobol (kolem mnus se pak mus pst mezery, aby se to nepletlo). Nkter pekladae dovoluj pst jmna s mezerami (nap. TIA Portal nebo Filemaker), ale to moc nedoporuuji, je s tm vc problm ne uitku - nutnost pouvat uvozovky a podobn. A u se rozhodnete pro jakkoli styl, doporuuji dodrovat ho jednotn v celm programu, abyste si nemuseli u kad promnn pamatovat krom jmna i jak se pe (nejhor zmatky nastvaj, kdy se vyskytnou dv rzn promnn lic se jenom stylem jmna).
Logickm promnnm (Boolean - true/false, 1/0, ano/ne) je dobr dvat jmna, jak odpovdaj stavu True: PistJeDole, MotorStoji, Nalezeno, VybranaLevaStrana a podobn. Kdyby se promnn jmenovala teba PolohaPistu, nemme anci poznat, jestli true=dole a false=nahoe, nebo pesn naopak.
Nkter prameny doporuuj v anglickch zdrojcch zanat jmna boolean slovem "is" nebo "has" ("je" nebo "m"). M to svoji logiku, ale univerzln pouiteln to je asi jenom pro atributy objekt. V neobjektovch jazycch pli asto potebujeme jin slovosled, aby to neznlo jako otzka (IsMotorRunning vs. MotorIsRunning) nebo nco pln jinho.
Velk pozor si dvejte na nejednoznanosti. Typick pklad: PistVpravo. Je to povel k pohybu pstu doprava, nebo signl, e pst je vpravo? Vyplat se dkladn se nad kadou promnnou zamyslet a dt j jmno teba i del a kostrbatj, ale jednoznan: PosunPistDoprava, PistJeVpravo; SpustKontrolu, KontrolaJeHotova; NastalaChyba, CisloChyby a podobn.
ikovn finta k odlien procedur a funkc od promnnch je pouit rozkazovacho slovesa v nzvu ("udlej nco"). Teba ZjistiJmenoUzivatele - na prvn pohled je vidt, e to m nco dlat, zatmco JmenoUzivatele vypad sp jako promnn, kde to jmno mme uloen.
Te nemyslm jazyk, kterm program mluv na uivatele, ale jazyk, kterm ve zdrojku pete identifiktory a komente. Nkdy si to zkaznk vslovn ur (zle na tom, s km spolupracujete a kdo se o kd potom bude starat), nkdy je mu to jedno a mete si vybrat. A u to dopadne jakkoli, doporuuji dret se vhradn jednoho a nemchat do toho dn dal. Smsici etiny a anglitiny toti podn nerozum ani ech, ani Anglian. A i kdy nkdo zn vechny jazyky, kter jsou ve zdrojku pouit, nem jet vyhrno, protoe u nkterch slov (hlavn zkratek) nen poznat, ve kterm jazyce vlastn jsou. Je "Prt" zkratka anglickho "Part", "Print" nebo eskho "Pritomnost"? Radi se pln vyhnte slabice "No", protoe ta me znamenat jak nezkrcen slovo "ne", tak zkratku pro "number", a obas to dv pln opan vznam. Typick pklad: NoErrors - je to "number of errors" neboli poet chyb (0 = vechno v podku), nebo pznak "no errors" neboli dn chyby (0 = mme problm)?
Dal rove ifrovn pidvaj peklepy a gramatick chyby. V normlnm textu tolik nevad, ale kdy me jedno pozmnn psmenko vytvoit pln jin platn slovo ve druhm jazyce, je to hor. Je "Pas" esk oznaen dopravnho psu, nebo anglick "Pass"? Je "Pich" povel k vysunut propichovac jehly, nebo jenom zkomolen "Pitch", ili rozte? Nkter editory um automaticky dokonovat rozepsan slova, take vm chybu slun rozkopruj nap celm programem.
Neanglick jazyky maj vhodu, e se identifiktory nepletou s vyhrazenmi slovy a e na prvn pohled poznte, co je soust vaeho programu a co systmov funkce. Anglitina m zase vhodu, e mete svj zdrojk snadno konzultovat s technickou podporou vrobce (pokud zrovna nem ve vaem okol schopnho eskho zstupce). A v neposledn ad m jakkoli matesk jazyk vhodu, e ho ovldte ze vech nejlp a nevnte si do programovn jet starosti s pekladem.
Je "Cam" zkrcen "Camera", nebo je to opravdu jenom "Cam" neboli vaka? "Lt" je "Left", "Light" nebo "Length"? Me "Str" znamenat "Strana", "Sted", "Start", nebo nco pln jinho? Uznvm, e je otrava pst pod dokola "Dil1Zalozen" nebo "ZavriChapadlo", ale ve vsledku to zabere m asu ne po pl roce marn vzpomnat, co znamen "D1prt" nebo "CHZ". Vele doporuuji nauit se datlovat vemi deseti bez koukn na klvesnici, uet to dobrou tetinu pracovn doby.
Dal skal zkratek je nejednoznanost. Typicky a nejastji "Zap" a "Vyp": jsou to povely "Zapnout" a "Vypnout", nebo signly "Zapnuto" a "Vypnuto"? Stejn problm m i anglitina, "On" a "Off" jsou dvojznan i bez zkracovn. Tady je opravdu nutn pst cel slovo a v ppad poteby pidat i dal (nap. "PowerOn" rozliit na "PowerIsOn" a "TurnPowerOn").
"Nemohu neci, e nejsem nerad" - a co tm vlastn chci ci? Negace logickch vraz je triviln operace, ale kdy se to s nimi peene, lovk ztrc pehled, kolik zpor se navzjem vyruilo a kolik jich jet zbv.
Typick pklad jsou signly z optickch zvor: v neaktivnm stavu svt, a kdy perute paprsek vloenm pedmtu, zhasnou. Osvdilo se mi takov signl vdycky pojmenovat kladn, teba "Dil1JePryc", ne negovan, teba "Dil1NeniZalozen". Kdy potom signl nkde pouvm znegovan, zpis "NOT je pry" se mi te lp ne "NOT nen tu" - nemusm v duchu potat zpory a nemate m ptomnost slova s opanm vznamem.
Vyplat se pejmenovat si i nevhodn nazvan signly z rznch externch zazen. Typicky nap. nco, co se podle manulu jmenuje "ERROR" a pitom to m pi vskytu chyby zhasnout - to bych si intern pojmenoval teba "OK".
U pkazu Poloha:=59 je zcela zbyten pst si poznmku "nastaven poadovan polohy" - to z nzvu promnn a piazovacho opertoru pochop kad na prvn pohled. Mnohem uitenj je poznamenat si, e 59 je vchoz poloha tsn nad stolem - to nev nikdo krom vs (a ani vy si to nebudete pamatovat vn). Ppadn dal podrobnosti jako e kladn smr je nahoru a jednotky jsou desetiny milimetru taky nejsou na kodu, ale uklidil bych je nkam k deklaraci promnn Poloha.
Je samozejm mon se vem "magickm" hodnotm vyhnout a nahradit je vhodn pojmenovanmi konstantami. M to svoje vhody, hlavn kdy se jedno slo pouv na vce mstech a potebujete ho mnit vude stejn. Ale pomrn asto zjistte, e je program pehlednj, kdy jsou sla uveden pmo ve vkonnm kdu: nemuste pod peklikvat mezi pracovnm cyklem a oblast definic. To je vhoda hlavn pi lutn cizho kdu, kdy potebujete udret v pamti dost vc a pi kadm skoku na jin msto hroz, e vm nco vypadne.