torsdag 25 mars 2010

Grön programmering - att spara kodrader?

Handlar Grön programmering om att enbart spara kodrader?

Fråga:

I intruktionen till Kmom04 läser jag:

Grön programmering -> spara kodrader

Är detta alltid vad som gäller?

Jag har lyckats skriva...

if(($rolls = filter_input(INPUT_POST, 'rolls', FILTER_VALIDATE_INT)) <= 0) $rolls = 6;

...vilket får ner exemplets tvåraderskod på en rad + lägger till ytterligare funktionalitet.

Men det är fruktansvärt oläsligt. Vad den gör är att den skapar variabeln $rolls, kollar av om post-variabeln 'rolls' är ett heltal större än noll och defaultar till 6 om den inte är det, vare sig det finns data eller inte i post-variabeln.

Jag undrar alltså om vi alltid ska försöka skriva så få kodrader som möjligt?

Och påverkar det hur mycket processor/minne som används?

Det är en filosofi som jag nu tvingas sätta ord på...

Det handlar om att skriva bra kod, läsbar och underhållbar kod. Det handlar om att koda intelligent och spara antalet kodrader genom att strukturera i filer, klasser, funktioner. Det handlar om att återanvända kod. Det handlar om att veta vilka möjligheter som finns funktioner som är inbyggda i språket. Det handlar om att använda dessa inbyggda möjligheter på bästa sätt och undvika att uppfinna egna (onödiga) lösningar på problem som någon annan redan löst.

Ett enkelt exempel är att använda funktionen för auto_load av klasser.

http://php.net/manual/en/language.oop5.autoload.php

Det "sparar" rader varje gång man skapar ett nytt objekt. Enkelt. Korrekt. Mindre kod att underhålla. Kräver att man har koll på olika inbyggda möjligheter i språket. Kräver att man läst manualen.

Det handlar INTE om att skriva kryptisk kod. Svårt att underhålla. Min syn på nedanstående exempel är till att börja med att alla if-staser bör innehålla måsvingar. Om man använder en if-sats så skall man även använda måsvingar. I vissa fall, undantagsfall, så kan jag skriva en liknande if-sats men då använder jag alltid måsvingar.

//Original
if(($rolls = filter_input(INPUT_POST, 'rolls', FILTER_VALIDATE_INT)) <= 0) $rolls = 6; 



//Better 
if(($rolls = filter_input(INPUT_POST, 'rolls', FILTER_VALIDATE_INT)) <= 0) {
  $rolls = 6; 
}

Ovanstående är en vanlig konstruktion för att hantera GET eller POST variabler. För egen del föredrar jag dock konstruktionen ? :. Den må vara lite kryptisk men den är enkel när man lärt sig den och den sparar kodrader utan att vara svår att underhålla.

//Original 
if(($rolls = filter_input(INPUT_POST, 'rolls', FILTER_VALIDATE_INT)) <= 0) $rolls = 6; 


//This is how I would do it, easier to read the code 
$rolls = filter_input(INPUT_POST, 'rolls', FILTER_VALIDATE_INT)); 
$rolls = ($rolls <= 0) ? 6 : $rolls;

Men, i längden så vet jag att detta är något som jag gör om och om igen, då hade jag valt att lägga det i en egen funktion.

$articleId = $pc->GETisSetOrSetDefault('article-id', 0);
$pc->IsNumericOrDie($articleId, 0);


Ett exempel på sådan kod finns här:

http://github.com/mosbth/Persia/blob/v0.32/pages/forum/PArticleEdit.php

Så långt om Grön programmering. Antar att jag får tillfälle att förtydliga denna filosofi framöver...

Inga kommentarer:

Skicka en kommentar