Tabulátory vs. mezery

Dlouhou dobu jsem si lámal hlavu nad tím, jaký způsob odsazování kódu je nejlepší. Nejdříve jsem používal vkládání mezer místo pravých tabulátorů (soft tab), poté pouze taby (hard tab). Teprve dnes jsem doufám objevil to pravé řešení, které si bere výhody obou předchozích.

Nejdříve projdu obě předchozí varianty:

symboly v ukázkách: mezeru vyjadřuje tečka, tabulátor >>

Pouze mezery

Tato technika je dobrá zejména pro svou snadnou přenositelnost a "nezničitelnost" formátování. Je ale noční můrou pro programátory, kteří mají rádi určitý způsob odsazení a neradi se přizpůsobují. Jakmile v mezerách vytvoříte nějaké odsazení, má programátor čtoucí kód po vás prostě smůlu.

....function foo($param1,
.................$param2)
....{
........echo 'boo';
....}

Pouze taby

Tato technika je dobrá právě svojí přizpůsobitelností. Máte rádi odsazení bloků 3 mezery? Není problém, stačí patřičně nastavit váš editor. Pro odsazení bloků je tedy tato technika výtečná, zásadně ale naráží u zarovnání (např. zarovnání parametrů funkce pod sebe). Pro správné zobrazení zarovnání je potřeba mít nastavený stejný počet znaků na jeden tabulátor jako autor kódu, což je opět velmi omezující a tudíž špatně.

 >> function foo($param1,
 >>  >>  >>  >> .$param2)
 >> {
 >>  >> echo 'boo';
 >> }

Už tušíte? Ano je to tak:

Taby pro odsazení, mezery pro zarovnání

Tato kombinace se zdá být zcela nenapadnutelná. V kódu se dá libivolně měnit velikost odsazení bloků, aniž by bylo poškozeno zarovnání.

 >> function foo($param1,
 >> .............$param2)
 >> {
 >>  >> echo 'boo';
 >> }

Hodnocení

Komentáře

2008-01-07 00:55:31

A s proporciálním písmem v editoru je všechno jinak. :-D

[2] hrach
2008-01-14 13:45:48

Dřív sem to neřešil, pak tabulátory. a teď jedině mezery ;)

2008-03-19 13:23:37

ja to resim ctrl+a a reformat code...a je klid :-)

[4] Michal
2008-03-27 10:38:16

programátor, který se fixuje pouze na svůj styl formátování a nerad se přizpůsobuje je s prominutím k ničemu. V praxi každá firma požaduje ten svůj způsob zápisu. Jinak mezery ;).

[5] Jirik
2008-04-22 07:36:18

Nechapu to. Proc pouziva nekdo mezery? Na odrazeni se maji pouzivat tabulatory, na zarovnani take. Jde predevsim o autora kodu, aby se v tom vyznal. Ostatni nejsou tak duleziti. Preci ja jako Linuxak, nebudu konvertovat konce radku do formatu Win, aby nedko dokazal lepe cist, ne? Nehlede na to, ze tabulator je jeden znak, tudiz zabira mene nez mezery.

Na tento komentář odpověděl [6] Dundee
[6] Dundee
2008-04-23 14:41:04

#5 Jirik: To myslim neni uplne nejlepsi pristup :) Kod piseme ciste a prehledne predevsim pro lidi, co ho budou cist po nas. Proto si myslim, ze je nejlepsi odsazovat taby a zarovnavat mezerami. Pri jakemkoliv nastaveni se kod nerozpada a da se libovolne nastavit hloubka zanoreni (typicky na linuxu tab=8mezer, na win tab=4mezery).

Nazor, ze kod pisi jen pro sebe je dost problematicky. Slysel sem napr. jednoho kluka se ptat, proc ma u singletonu vytvaret metody getInstance a deklarovat konstruktor jako privatni. Ze on to prece vi, ze ho nema volat :) Jde prave o to, ze casto kod bude pouzivat i nekdo jiny...

2008-05-03 10:29:42

Používání mezer je taky vynucováno nejen v některých firmách, ale také např. v open source komunitách. Mezery např. vyžaduje CMS Drupal nebo PHP knihovny PEAR.

Zde je jednotná politika psaní kódu opravdu důležitá. Kromě lepší čitelnosti kódu, na kterém se podílí v případě Drupalu (+ jeho modulů) v dnešní době přes 2000 vývojářů, je to důležité zejména pro generování patchů pokud se chcete podílet na úpravě/opravě modulů.

Např. stačilo abych vygeneroval patch a měl zapnuto v editoru odstraňování mezer na konci řádku nebo nějaký podobný zlepšovátko a někteří autoři modulů se mnou pěkně vyběhli... Musel jsem udělat patch nový jinak se se mnou - už z principu - odmítali bavit, byť mít mezery na konci řádku byla defakto jejich chyba. Prostě napsali "Please respect standandards and create new patch", dostal jsem odkaz na stránku s dokumentací a bylo... Pokud lidi pošlou denně 20 takových patchů, kde polovina změn jsou bílý znaky, tak bych na standardech asi taky bazíroval :-)

[8] Yrwin
2008-07-25 09:45:11

Idea je pekna, ale zajimalo by me, jak to realizovat. Vetsina editoru (vsechny co znam) umeji nastavit tabulator tak, ze kresli bud mezery nebo tabulatory. Nikoliv jejich kombinaci.

Na tento komentář odpověděl [10] Dundee
[9] sNop
2008-07-26 16:30:15

jedine mezery, kdyz pouzijes taby, tak se odsazeni v kazdem editoru zobrazi uplne jinak a mas steho mys mas, takze musis nastavit velikost odsazeni tab jakou mnel nastvenou programator

Na tento komentář odpověděl [10] Dundee
2008-07-28 13:07:54

#8 Yrwin: Idea je velmi jednoducha. Nastavis si editor tak, aby ti odsazoval taby. Takze pak vsechno odsazovani delas jednoduse klavesou TAB.

Pokud chces neco zarovnat (napr. druhy parametr funkce pod prvni), podrzis chvili mezernik a dojedes si tam.

Tim mas zaruceno, ze se v zadnem editoru text nerozpadne a zaroven si muze kazdy nastavit, jak hluboke odsazeni se mu zobrazi (kolik mezer na tab).

#9 sNop: Chyba lavky. Nemas pravdu. Precti si clanek znovu a pozorneji :)

[11] sNop
2008-07-30 12:55:52

tak podle tveho odsazeni to bude vypadat vsade stejne ja ideu chapu, ze odstavce se odsadi tabama a jednolivy(vnoreny) kod se odsadi mezerama, ale proc to takto zlozito delat, nechapu kcemu to je dobre a ukaz mi jeden poradny vecsi projekt, ktery by pouzival takyto postup jak si napsal ty, kdyz najdes aspon jeden tak klobouk dolu

Na tento komentář odpověděl [12] Dundee
2008-07-30 14:42:22

#11 sNop: Co je na tom sloziteho? Proste normalne tabuju odsazeni a kdyz chci neco zarovnat, podrzim mezernik. Jednoduche.

Je to dobre v tom, ze nikomu nevnucuje hloubku odsazeni sveho kodu. Kazdy si muze zobrazit kod podle svych pozadavku. Nekdo ma rad 2 mezery na tab, ja mam rad 4, ale nekdo pouziva i 8 mezer na tab.

Predstav si, ze nekdo, kdo je zvykly na 8 mezer, bude muset zacit delat na kodu, kde jsou 2 mezery na tab....

[13] snop
2008-08-09 16:02:07

tak si skratka nastavi o mezer a hotovo, kazdy slusny editor to odsadi, ja zasadne pouzivam mezery, sto lidi sto nazoru, ale radsi se drzim vetsiny, takze si to neber nejak osobne

Na tento komentář odpověděl [14] Dundee
2008-08-12 14:53:15

#13 snop:

tak si skratka nastavi o mezer a hotovo

Nerozumím. Jak to myslíš?

Pokud někdo použije soft taby (mezery místo tabů) pro odsazení, už se to nedá zobrazit jinak...Je to zkrátka napevno. Proto je to asi tak oblíbené - je to blbuvzdorné.

Na tento komentář odpověděl [15] snop
[15] snop
2008-08-16 22:28:50

#14 Dundee: sry sem se pomylil, no ale myslel sem to uplne jednoducho, nastavis soft taby na 4 tak to vsechno budes mnet odsadene na 4 mista nastavis na 2 budes mit na dva, vcetne i odsadeni odstavcu, ktere ty odsazujes zvlast pomoci pevnych tabu

Na tento komentář odpověděl [16] Dundee
2008-08-19 16:49:37

#15 snop: To právě není pravda.

Pokud někdo odsazuje 4mi soft taby a někdo po něm musí na tom kódu pracovat, má už smůlu. Nemůže si změnit odsazení podle sebe.

Pokud by chtěl např. změnit odsazení ze 4 na 6 mezer, zničilo by se mu zarovnaní, protože editor není schopen poznat, co je zarovnání a co je odsazení.

2009-08-25 16:15:47

Já si myslím, že se řeší nesmysl...pokud člověk pracuje sám pro sebe, tak je to jedno, protoze to nechá IDE přeformátovat automaticky do podoby, která se mu líbí....pokud nepracuje sám pro sebe a ve firmě se používá SVN (nebo jakýkoliv jiný verzovací nástroj, co nedělá derivační strom), tak stejně nemůže nic moc změnit :-))...leda mít tohle jako společnou politiku...ale popravdě...mně by z toho hráblo to všude hlídat :-))

Komentáře již nelze přidávat