Digitalna papazjanija

Programerski rukopis ili formatiranje PHP koda

Kada sam pre mnogo godina pokrenuo ovaj blog, želeo sam da pišem o svemu sem o programiranju jer nisam želeo da smaram ljude stvarima koje i onako sami mogu naučiti. Međutim, kako me sve češće ljudi pitaju za savete, večina tekstova o programiranju vezana je za rešavanje nekih specifičnih problema koji se teško ili uopšte ne mogu naći na Internetu. Takođe se ispostavilo da je moja hipoteza pogrešna i da ljudi jednostavno ne žele čitati savete dok im ne zagusti, a onda obično bude kasno.

Solarized NetBeans Theme

Ovaj tekst namenjen je kako početnicima u programiranju, tako i onima koji su na PHP kodiranje prešli sa neke druge platforme, da ne kažem nekog drugog programskog jezika. Za razliku od npr C-a, u kome su programerske konvencije odavno definisane, a kasnije i Jave gde čak nema ni varijacija na temu, PHP piše kako ko hoće i kako kome odgovara, pa se do standardizacije došlo poprilično kasno. Toliko kasno, da na velikom delul projekata i dalje ne postoje jasno definisani standardi, od imenovanja promenljivih, preko fofrmatiranja samog koda, do organizacije klasa i hijerarhije fajlova unutar samog projekta.

Oblik jednog PHP fajla

PHP fajl je fajl (ili datoteka) jednostavnog tekstualnog (plain text) tipa. Za programiranje u PHP-u nije vam neophodan nikakav skup program niti razvojno okruženje. Dovoljan je najjednostavniji tekst editor kao npr: Notepad, Gedit, Krite, vi… PHP kod unutar fajla počinje i završava se punim <?php tagovima i izbegavajte sve skraćene verzije. Takođe, ako u falu imate samo PHP kod, zatvoreni ?> tag nije neophodan i preporučuje se njegovo namerno izostavljanje kako ne bi dobijali bespotrebne beline koje mogu stvoriti velike probleme koji se teško otkrivaju.

[php]
<?php
phpinfo();
?>
[/php]

Dužine linija tj redova koda

Za razliku od klasičnih (nižih) programskih jezika, gde su imena funkcija kratke jer ih generalno ima malo, PHP za skoro svaku sitnicu ima zasebnu funkciju koja se zove opisno i često sa punim nazivima. Samim tim, linije koda teško je obuzdati u preporučenim širinama do 80 karaktera, pa čak i oni sa strogim preporukama za pisanje old school koda dozvoljavaju izuzetke. Budimo realni, niko više ne programira u širini do 80 karaktera. Čak ni Linux developeri koji pišu u konzoli koriste velike monitore. Sećam se da sam programirao na maleckom EeePC-ju, pa sam izlazio iz okvira od 80 karaktera. Dakle trudite se da vam kod bude kraći od 80 karaktera, ali ne paničite ako mora biti duži.

Novi redovi i različite platforme

Za kraj reda tj [enter] prati se UNIX konvencija i kraj reda treba da je jedan linefeed (LF) karakter (za tehničare ASCII kod 10 ili heksadecimalno 0x0A). Ne koristite Apple OS varijantu CR varijantu, ni Windows CRLF. Koji god operativni sistem da koristite, podesite editor na LF.

Uvlačenje redova

Kako programeri za uvlačenje redova koriste TAB-ove čije se dužine u editorima mogu podesiti na različite vrednosti, praksa je pokazala da se takav kod uvek raspadne. Zato je nepisano pravilo da se u editorima vrednost taba postavlja na 4 spejsa i da se umesto tabova koriste spejsevi. Od masovnijih projekata WordPress preporučuje da se na prvom mestu u liniji uvlači tab-om, a za ostalo koristi spejs. U realnosti, koristite 4 spejsa, a kome treba drugačije podesiće u editoru i automatski konverttovati.

Pozivi funkcija

Tik uz uvlačenje redova, nalaze se i pozivi funkcija koji se često formatiraju po vertikalnoj liniji. Ako imate jedan poziv funkcije stavite po jedan spejs pre i posle znaka jednakosti tj dodele:

[php]
$var = foo($bar, $baz, $quux);
[/php]

Ako imate blok koda sa više uzastopnih poziva funkcija, čitljivost ćete povećati vertikalnim poravnanjem dodavanjem razmaka sa leve strane:

[php]
$short         = foo($bar);
$long_variable = foo($baz);
[/php]

Generalno, uvek stavljajte po jedan spejs pre i posle operatora pri dodalama i u logičkim izrazima, kao i spejs posle zareza u nabrajanju. Kao što bi ste i u običnom pisanju teksta na računaru.

Stringovi i navodnici

Velika polemika se vodila i oko upotrebe navodnika za stringove, kao najčešći tip podataka. Za obične stringove (koji ne sadrže nikakve promenljive) koristite jednostruke navodnike:

[php]
$a = ‘Example String’;
[/php]

Za stringove koji u sebi već sadrže jednostruke navodnike, kao što su npr SQL upiti, koristite dvostruke navodnike:

[php]
$q1 = “SELECT COUNT(user_id) FROM tbl_users”
.”WHERE user_id = 1024 LIMIT 1;”;
[/php]

Za stringovi koji uključuju promenljive, takođe koristite dvostruke navodnike:

[php]
$greeting = “Hello $name, welcome back!”;
[/php]

Za spajanje stringova u jeziku PHP koristi se tačka. Zbog bolje čitljivosti koda, pre i posle tačke (između stringova i promenljivih) ostavljajte po jedan spejs:

[php]
$poruka = ‘Zdravo’ . ‘ ‘ . ‘svete’;
[/php]

Kada su u pitanju nizovi, uvlačite ih kao bilo koji drugi blok koda za jedan nivo, a ako je izvodljivo držive ključeve i vrednosti poravnate po vertikalnoj osi:

[php]
$sampleArray = array(
‘firstKey’ => ‘firstValue’,
‘secondKey’ => ‘secondValue’,
);
[/php]

Kontrole tokova

Za IF iskaze uvek koristite vitičaste zagrade unutar blokova koda, čak i ako je u bloku samo jedna komanda. Zagrade sa uslovom odvojite jednim spejsom od samih if/else/elseif ključnih reči. Ako se desi da linija sa uslovima unutar if-a bude predugačka, prelomite je u više redova, sa odgovarajućim uvlačenjem koda u jednom nivou. Vitičaste zagrade pišite u istom redu gde su i male zagrade uslova i odvojite ih jednim spejsom.

[php]
if (($a == $b)
&& ($b == $c)
|| (Foo::CONST == $d)
) {
$a = $d;
}
[/php]

Isto važi i za ostale kontrole poput switch-a i do-while:

[php]
do {
actions;
} while ($condition);
[/php]

Komentari u kodu

Komentare u kodu možete ostavljati na više načina ali praktikujte standardni C format ako se radi o bloku komentara:

[php]
/* blok komentara u kome pojašnjavate šta radi kod ispod
ne morate opisivati kako radi jer se to može pročitati iz
samog koga: Mnogo će vam više značiti na šta se kod odnosi.*/
[/php]

Za jednolinijske komentare koristite C++ stil:

[php]
// komentar za promenljivu ispod
$activeUsers = getAtiveUsers();
[/php]

Detaljnija literatura: