Efektivně v PHP
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Efektivně v PHPEfektivně v PHP

 

Efektivně v PHP

Google       Google       10. 12. 2007       19 226×

Znalost jazyka neznamená pouze pochopení syntaxe. Znamená to také určitou úroveň kódu, jeho efektivnost, snadnou rozšiřitelnost a lehkou pochopitelnost. Podívejme se na časté začátečnické chyby.

Reklama
Reklama

V poslední době se ze mě stal člověk pachtící se po dokonalém kódu. Na svých projektech provádím pořád nějaký ten refactoring a práce jde pomalu. Ale práce je o to zábavnější, když vím, že ten kód je v pořádku a je efektivní. Nic se nesmí přehánět, musí nám vždy zůstat ten „zdravý rozum“. Ukažme si, co by ale opravdu v našem kódu být nemělo.

Podmínky

Velmi častou začátečnickou chybou je špatné napsání podmínek. Přitom podmínka je operace zabírající velmi mnoho operačního výkonu. Pracujme s příkladem. Máme jedenáct (hodnotících) číselných stavů a chceme jim pro efekt přidat barevné vyjádření. Špatný kód by vypadal asi nějak takhle:

if($bod==0): $color = "color:#ab0203"; endif;
if($bod==1): $color = "color:#d52b05"; endif;
if($bod==2): $color = "color:#fa530a"; endif;
if($bod==3): $color = "color:#fa8324"; endif;
if($bod==4): $color = "color:#fa9d24"; endif;
if($bod==5): $color = "color:#fac024"; endif;
if($bod==6): $color = "color:#ecce08"; endif;
if($bod==7): $color = "color:#dbec08"; endif;
if($bod==8): $color = "color:#b7dc04"; endif;
if($bod==9): $color = "color:#94dc04"; endif;
if($bod==10): $color = "color:#15be02"; endif; 

Nahoďme řečnickou otázku: Může proměnná $bod nabývat v jednu chvíli více hodnot? Myslím, že nikoli. Pak by tedy kód měl vypadat asi nějak takhle:

if($bod==0): $color = "color:#ab0203";
elseif($bod==1): $color = "color:#d52b05";
elseif($bod==2): $color = "color:#fa530a"; 
elseif($bod==3): $color = "color:#fa8324"; 
elseif($bod==4): $color = "color:#fa9d24"; 
elseif($bod==5): $color = "color:#fac024"; 
elseif($bod==6): $color = "color:#ecce08"; 
elseif($bod==7): $color = "color:#dbec08";
elseif($bod==8): $color = "color:#b7dc04";
elseif($bod==9): $color = "color:#94dc04";
elseif($bod==10): $color = "color:#15be02"; endif; 

Pomiňme, že kód je velmi těžce rozšiřitelný, a vyhodnoťme výsledek. V ideálním případě jsme nyní ušetřili 10 zpracování podmínek. A to se počítá. Ale upřímně, takový kód se nesluší snad ani pro kompilované jazyky, natož pro ty interpretované, které disponují asociativními poli apod. Zde není ono asociativní pole ani potřeba a dosáhneme opravdu efektivního výsledku:

$colors = array("#ab0203", "#d52b05", "#fa530a",
				"#fa8324", "#fa9d24", "#fac024", "#ecce08",
				"#dbec08", "#b7dc04", "#94dc04", "#15be02");

$color = "color:" . $colors[$bod];

Nakonec, sami vidíte, že tento kód je i kratší.

Funkce, funkce, funkce

Využití dostupných funkcí je základní vlastnost dobrého programátora. Už pouhý výraz v podmínce je přehlednější a jasnější. Osobně proto preferuji tento zápis:

if (empty($foo)) {   //nenechte se zmýlit, dvojité slovo empty zaviňuje js zvýrazňovač :-/
}

Namísto:

if ($foo == "") {
}

Narychlo jsem ve svém archívu vybrousil jednu krásnou, tedy spíše hnusnou, funkci. (Musím doplnit, že svůj krásný archív začátků jsem asi už smazal :(.) Funkce slouží k odstranění lomítek ze začátku a konce řetězce.

function pryc_lomitko($string)
{
	$i = 0;
	if($string{0} == '/') $i = 1;
	$y = strlen($string)-$i;
	if($string{strlen($string)-1} == '/') $y = $y-1;
	
	return substr($string, $i, $y);
}

A to stačí jen:

trim($string, '/');

Štábní kultura

S umem programovat souvisí i jeho „štábní kultura“. Přehledný kód je přímo radost číst a učit se z něj. Ale koho by bavilo louskat něco, co ještě dělá plno oklik a nevyužívá k tomu potřebné funkce. Počínaje správným a výstižným pojmenováním proměnných a konče odsazením, uzávorkováním apod. můžeme dosáhnout krásného výsledku.

 if($data_cla2["hodnoceni"]!=0): $kolikhl="Již ".$data_cla2["hodnoceni"]." hlasovalo."; else: $kolikhl=""; endif;

A lépe:

if ($clanek["hodnoceni"] !== 0) {
	$hlasu = "Již {$clanek["hodnoceni"]} hlasovalo.";
} else {
	$hlasu = null;
}

Dobrý programátor by neměl občas zapomínat i na komentáře. Zde ale střídmost platí 10násob. Dobře upravený kód napoví mnohem více, než dvouvětný komentář.

Pokud narazím na pěkně refactorovatelný kód, určitě se s vámi o něj podělím. Závěrem přeji mnoho úspěchů při vylepšování vašich „zdrojáků“, pevné nervy při učení nových věcí a hodně povedených projektů.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jan ŠkrášekHonza pracuje jako webdeveloper, věnuje se vývoji Nette\Database a Nextras komponentám. Mnoho času věnuje komunitnímu portálu signály.cz. Honza je taky fanouškem XML technologií.
Web     Twitter    

Nové články

Reklama
Reklama
Obrázek ke článku Blockchain & Bitcoin konference

Blockchain & Bitcoin konference

V pátek 19. 5. 2017 se v pražském konferenčním centru Andel’s konala Blockchain & Bitcoin konference. Řada odborníků a podnikatelů v oboru blockchainu a kryptoměn představila možnosti budoucího směřování tohoto oboru. Speakeři většinou rusky mluvící provenience prezentovali řešení svých firem založená na technologii blockchainu.

Obrázek ke článku Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Bezpečnostní tým Cisco Talos odhalil celkem 4 kampaně dosud neobjeveného malwaru, který dostal jméno KONNI. Ten se dokázal úspěšně maskovat od roku 2014. Zpočátku se malware zaměřoval pouze na krádeže citlivých dat. Za 3 roky se ale několikrát vyvinul, přičemž jeho současná verze umožňuje útočníkovi z infikovaného počítače nejenom krást data, ale i mapovat stisky na klávesnici, pořizovat screenshoty obrazovky či v zařízení spustit libovolný kód. Pro odvedení pozornosti oběti zasílali útočníci v příloze také obrázek, zprávu a výhružkách severokorejského režimu či kontakty na členy mezinárodních organizací.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý