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

Efektivně v PHPEfektivně v PHP

 

Efektivně v PHP

Google       Google       10. 12. 2007       19 017×

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

Obrázek ke článku JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá první nonstop veřejně dostupnou digitální dílnu světového formátu s vybavením za 3 miliony korun. Dílnu může využívat po registraci kdokoliv. V  prostorách vzniknou prototypy produktů místních startupů, projekty kutilů a studentů i umělecká díla. Cílem dílny je zpřístupnit veřejnosti drahé přístroje a přitáhnout více podnikavých lidí k technickým oborům.

Reklama
Reklama
Obrázek ke článku Nový IT hráč na českém trhu

Nový IT hráč na českém trhu

V roce 2015 otevřela v Praze na Pankráci v budově City Tower své kanceláře společnost EPAM Systems (NYSE:EPAM), jejíž centrála se nachází v USA. Společnost byla založená v roce 1993 a od té doby prošla velkým vývojem a stále roste.

Obrázek ke článku České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace (CRA) pořádají druhý ročník CRA IoT Hackathonů. Zájemci z řad vývojářů a fanoušků moderních technologií mohou změřit své síly a během jediného dne sestrojit co nejzajímavější funkční prototyp zařízení, které bude komunikovat prostřednictvím sítě LoRa. CRA IoT Hackathony se letos uskuteční ve dvou fázích, na jaře a na podzim, v různých městech České republiky. Jarní běh se odstartuje 31. března v Brně a 7. dubna v Praze.

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ý