Styl zápisu programu

Z Wikipedie, otevřené encyklopedie
(přesměrováno z Zarovnávání)

Styl zápisu programu (v angličtině code style) 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í vyhnout se formálním 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ě.

V praxi je výhodné použít konkrétní hotovou sadu formátovacích pravidel a nevymýšlet svojí vlastní. Díky tomu se při přesunu kódu z jednoho vývojáře na dalšího (například v rámci různých firem) nemusí přenášet i sada pravidel, ale použití se již zažité principy. Například pro jazyk PHP existuje sada pravidel PSR2[1].

Prvky dobrého stylu[editovat | editovat zdroj]

Je obtížné definovat, co je dobrý styl. Přesný standard není definován, jedná se do jisté míry 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ů:

  • pojmenování objektů (proměnných, funkcí, typů, tříd)
  • vertikální a horizontální odsazování programových bloků
  • použití bílých znaků (mezery, tabulátory, přechody na nový řádek), zejména kolem operátorů, výrazů a klíčových slov
  • úprava komentářů

Formátování kódu se liší podle typu zvoleného paradigmatu a gramatických pravidel jazyka. Často se také odvozuje podle návrhových vzorů, které slouží pro sjednocení konvence.

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 orientaci v konkrétním algoritmu a zjišťování, co kód reálně dělá. Software pro psaní zdrojového kódu často 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í přímo k definici struktury a významu zdrojového kódu.

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]

U většiny programovacích jazyků platí, že pro oddělení syntaktických elementů lze použít libovolný počet bílých znaků (mezer, tabulátorů a konců řádku). Vhodné použití bílých znaků zlepšuje č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ý má nastaven tabulátor o délce čtyři znaky a přizpůsobuje tomu svůj zdrojový kód:

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

Jiný programátor má v editoru nastaven tabulátor o délce osmi znaků. Při prohlížení kódu od prvního programátora 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í tabulá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

Reference[editovat | editovat zdroj]

  1. PSR-2: Coding Style Guide - PHP-FIG. www.php-fig.org [online]. [cit. 2019-07-04]. Dostupné online. 

Externí odkazy[editovat | editovat zdroj]