rvitinn

Ungverskur rithttur

a er merkileg upplifun fyrir forritara a koma inn ntt umhverfi. urfa a alaga vinnubrg sn a v ar er gert, v a skiptir miklu mli hugbnaarger a hpurinn temji sr smu vinnubrg. Oft finnst manni maur vita betur, og a getur jafnvel veri satt, en a skiptir ekki mli. Maur a temja sr au vinnubrg sem fyrir eru. A.m.k. fyrst um sinn :-)

Ungverskur rithttur forritun felst v a tegund breytu s hluti af nafni hennar.
gamla daga var forritunarmli C ekki strangt taga og v lentu menn oft vandrum egar eir notuu ranga tegund breytu. Forritin ddu og allir voru glair en keyrslu fr allt til andskotans og enginn vissi hva var a.

Ungverjinn Charles Simonyi fann upp v a skrifa tpuupplsingar me lgstfum fremst breytunafni til a koma veg fyrir svona villur. Simonyi var sar forritari hj Microsoft og innleiddi ungverskan rithtt ar. essi rithttur er v notaur meal annars win32 apanum.
Dmi um rithttinn er a setja i fremst breytu ef hn er integer, f ef hn er float, d fyrir double, s fyrir strengi og p fyrir benda.

int iFjoldi = 3;
string sNafn = "Ji";
float fHaed = 1.80;
double dSull = 0.0;
string* psNafn = &sNafn; // bendir streng

Kosturinn vi etta er a ef maur kann a lesa hann arf maur ekki a velkjast vafa um tegund hverrar breytu. Maur sr a strax nafninu hvort um er a ra streng, heiltlu ea bendi. ar me er a upp tali.

Gallinn er a ki verur a mnu mati ljtur. g get bekena notkun essu C fyrir nokkrum rum, en meira a segja C er ori okkalega taga og allir almennilegir endur benda a egar rangar tpur eru notaar. Vissulega er hgt a cast-a sig framhj slkum villuboum enda, en menn vera lka a cast-a eigin byrg.

g ks a nota frekar lsandi breytuheiti, ar sem tilgangur breytunnar en ekki tegund kemur fram. Auk ess veit maur aldrei hvenr tpan breytist, int dag er kannski double morgun og klasi daginn eftir.
a er g regla a nota lengri og meira lsandi breytunfn v strra sem scopa breytunnar er. Ef maur er a nota teljara for lykkju er ekkert a v a nota eins stafs nafn. Ef maur er aftur mti a skilgreina breytur sem eru va snilegar (t.d. global breytur) skal nota langt og lsandi nafn.

alvru forritunarumhverfi sr maur tpuupplsingar breytu me v a setja bendilinn yfir hana. Ef a virkar ekki getur maur hgri smellt og fari a skilgreiningunni. Yfirleitt dugar a sl inn nafn breytu og setja punkt ea plu (->) fyrir aftan til a f upptalning llum agerum klasanum. Og komum vi a einum versta gallanum ungverska rithttinum. Ef a er bi a klessa tpuupplsingum fyrir framan nafni llum breytum raast member breytur ekki lengur eftir nafni. Ef g veit a klasi hefur ager ea breytu sem skilar/inniheldur upplsingar um nafn er lklegt a g skrifi einfaldlega breyta.n og fi upp lista af llum agerum/breytum sem byrja n. Ef aftur mti er bi a setja str ea s fyrir framan nafn allra strengja arf g fyrst a giska tpuna ur en g leita a breytunni.

g s mti v a nota ungverskan rithtt eru undantekningar reglunni. g tel t.d. skynsamlegt a aukenna member breytur me v a setja m fyrir framan nafni og s fyrir framan nfn static breyta.

etta segir Stroustrup um ungverskan rithtt

Hungarian notation - a coding convention that encodes type information in variable names. Its main use is to compensate for lack of type checking in weakly-typed or untyped languages. It is totally unsutable for C++ where it complicates maintenance and gets in the way of abstraction.

Reyndar er Stroustrup enginn Gvu, en g tek mark honum egar hann tjir sig um C++ forritun. Ef g ri einhverju vri bi a banna ungverskan rithtt me llu. En g r engu :-)

Anna sem g vildi sj oftar er a menn noti namespace C++. Ef ert me fyrirtki sem heitir Bifreiaverksti Badda, ekki setja BB fremst nafn allra klasanna inna. Namespace eru til staar mlinu, au a nota. a er svo agalega ljtt egar bi er a troa einhverri stafaspu fyrir framan ll tegundarnfn ka og a hljta allir a vera sammla um a feguru ka skiptir miklu mli :-)

class BBBill{}; // ekki svona
namespace BB { class Bill{}; } // heldur svona

forritun