Styl zápisu programu

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Styl zápisu programu je soubor norem nebo na pravidel, která se používají při psaní zdrojového kódu počítačového programu. Pravidla programovacích stylů umožňují programátorům snadnější orientaci a pochopení zdrojového kódu a zároveň pomáhají vyvarovat se chybám při jeho tvorbě. Tato pravidla také zlepšují přenositelnost programu z osoby na osobu resp. z programátora na programátora.

Základní pravidla byla poprvé sepsána v publikaci "The Elements of Programming Style", která byla vydána v 70. letech 20. století. Ilustrace a příklady byly čerpány z programovacího jazyka Fortran.

Programovací styl[editovat | editovat zdroj]

Programovací styl, použitý v jednotlivých programech, může být odvozen z obecných zásad, společností nebo jiných organizací, stejně tak jako z vlastního stylu autora kódu. Programovací styl je často navržen pro specifický programovací jazyk nebo jazykovou rodinu. Styly, používané pro rodinu jazyka C nemusí být vhodné pro použití pro jazyky typu BASIC atp. Přesto mohou být některá pravidla aplikována obecně.

Prvky dobrého stylu[editovat | editovat zdroj]

Je obtížné definovat, co je dobrý styl. Přesný standard není definován, jedná se spíše o subjektivní pohled každého programátora. Nicméně existují základní prvky, které jsou společné velkému množství programovacích stylů. Tyto základní prvky jsou považovány za součást programovacího stylu, zahrnujícího:

  • rozvržení zdrojového kódu včetně odsazování
  • použití bílých znaků (mezery, tabelátory, přechody na nový řádek) kolem operátorů a klíčových slov
  • psaní velkých písmen u klíčových slov a názvů proměnných
  • styl a pravopis identifikátorů, funkcí, procedur a názvů proměnných, definovaných uživatelem
  • použití a styl komentářů
  • použití, popřípadě vyvarování se programových konstrukcí volajících samy sebe (například příkaz GOTO)

Vzhled zdrojového kódu[editovat | editovat zdroj]

Programovací styly obvykle vycházejí z vizualizace zdrojového kódu, což programátorovi usnadňuje práci při vyhledávání informací o programu. Software pro psaní zdrojového kódu umožňuje automatické formátování, což programátorovi usnadňuje práci a umožňuje mu soustředit se na vlastní programování. Praktickým hlediskem automatického formátování zdrojového kódu je, že šetří čas a umožňuje snazší prosazení firemních standardů bez větších diskuzí.

Odsazování[editovat | editovat zdroj]

Styl zápisu s odsazováním pomáhá při identifikaci bloků kódu. U některých programovacích jazyků je odsazování používáno pro stanovení hranice logických bloků zdrojového kódu. Správné odsazování je v tomto případě více, než jen problém stylu. V některých jazycích neovlivňují netisknutelné znaky a odsazování funkčnost, avšak dělají zdrojový kód čitelnější. Porovnejte zápisy:

if (hours < 24 && minutes < 60 && seconds < 60)
{
    return true;
}
else
{
    return false;
}

nebo

if (hours < 24 && minutes < 60 && seconds < 60) {
    return true;
} else {
    return false;
}

s tímto zápisem bez přehledného odsazování

if ( hours<
24 && minutes<
60 && seconds<
60 )
{return true
;} else
{return false
;}

První dva příklady jsou čitelnější, odsazení je provedeno podle ustanovených pravidel. Tento styl odsazování je zejména používán u vícenásobných vnořených bloků.

Programovací jazyk Python používá odsazování k tomu, aby signalizoval správnost struktury zdrojového kódu. Proto je v něm vyžadováno správně odsazování. Zároveň není potřeba používat složené závorky ({ a }) a čitelnost je lepší, i když nevyužívá běžných stylů zápisu. Odlišné styly mohou vést k problémům při zkopírování a vložení zdrojového kódu do prostředí Python, protože styl odsazování nemusí být kompatibilní s vloženou částí. Ruční přeformátování je náročné na čas, avšak některé textové editory umí provést přeformátování automaticky. Zdrojový kód v Pythonu může být nepoužitelný na některých webových stránkách, které odstraňují netisknutelné znaky. V tomto případě se pro správné zobrazení v HTML kódu uzavírá zdrojový kód Pythonu mezi párové značky "<pre> ... </pre>".

Svislé zarovnání[editovat | editovat zdroj]

Často je užitečné seřadit podobné elementy zdrojového kódu svisle, protože jsou vzniklé chyby zřetelnější. Porovnejte:

$search = array('a', 'b', 'c', 'd', 'e');
$replacement = array('foo', 'bar', 'baz', 'quux');
 
$value = 0;
$anothervalue = 1;
$yetanothervalue = 2;

s tímto příkladem:

$search      = array('a',   'b',   'c',   'd',    'e');
$replacement = array('foo', 'bar', 'baz', 'quux');
 
          $value = 0;
   $anothervalue = 1;
$yetanothervalue = 2;

U druhého příkladu je zvýrazněná možná chyba:

  • v poli search je o jednu položku navíc

Argumentem proti svislému zarovnání může být problém udržení zarovnání u některých editorů. Tento problém může být eliminován použitím editoru zdrojového kódu, který podporuje funkci elastických tabulátorů. Na další problém můžeme narazit při použití verzovacích systémů: pokud bychom přidali čtvrtou položku s delším názvem, museli bychom přidat mezery i k prvním třem řádkům – ve verzovacím systému by pak byly zaznamenány změny na řádcích, na kterých se fakticky nic nezměnilo.

Mezery[editovat | editovat zdroj]

Mezery jsou definovány jako bílé znaky. U většiny neformátovaných programovacích jazyků mohou být tyto znaky použity, aniž by jakýmkoli způsobem ovlivnily význam programu. Většinou se používají pro lepší čitelnost zdrojového kódu. Příkladem může být porovnání syntakticky ekvivalentních příkladů zdrojového kódu jazyka C:

int i;
for(i=0;i<10;++i){
    printf("%d",i*i+i);
}

vs.

int i;
for (i=0; i<10; ++i) {
    printf("%d", i*i+i);
}

vs.

int i;
for ( i = 0; i < 10; ++i ) {
    printf( "%d", i*i + i );
}

Tabulátory[editovat | editovat zdroj]

Použití tabulátoru k odsazení znaků přináší specifické problémy s velikostí odsazení tabulátoru, které se liší v závislosti na použitých nástrojích a uživatelských preferencích. Příkladem může být programátor, který preferuje tabulátor o délce čtyři znaky, který tomu přizpůsobuje svůj zdrojový kód:

int ix; // Index to scan array
long sum; // Accumulator for sum

Jiný programátor preferující tabulátor o délce osmi znaků vytvoří odlišně formátovaný zdrojový kód. Při prohlížení pak může být zdrojový kód méně čitelný:

int ix; // Index to scan array
long sum; // Accumulator for sum

Stanovení šířky osazení (obvykle 4 znaky, případně 8 nebo 2) a rozhodnutí zda pro odsazování používat tabulátory nebo mezery je důležitou součástí konvencí pro psaní kódu každého týmu. Teoretickou výhodou použití tabulátorů je, že ukládají do textu sémantickou informaci: počet úrovní odsazení = počet po sobě jdoucích tabulátorů. Použití tabulátorů však přináší problémy, protože je obtížné tuto konvenci dodržovat, když kód odsazený tabulátory a mezerami vypadá stejně. Z tohoto důvodu je lepší se použití tabelátorů úplně vyhnout.

Vhodné názvy proměnných[editovat | editovat zdroj]

Vhodný výběr názvů proměnných je základním principem pro tvorbu dobře stylizovaného zdrojového kódu. Špatně pojmenované proměnné zhorší jeho čitelnost, což je ukázáno na příkladu:

get a b c 
if a < 24 and b < 60 and c < 60
  return true
else
  return false 

Kvůli nevhodné volbě proměnných je poměrně složité na první pohled zjistit, k čemu daná část zdrojového kódu slouží. V následujícím příkladu jsou názvy proměnných více názorné a je snadnější rozpoznat záměr kódu:

get hours minutes seconds 
if hours < 24 and minutes < 60 and seconds < 60
  return true
else
  return false 

Externí odkazy[editovat | editovat zdroj]