Otevřít hlavní menu

Styl zápisu programu

sada pravidel či pokynů používaných při zápisu zdrojového kódu počítačového programu
(přesměrováno z Odsazení)

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í stylEditovat

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 styluEditovat

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óduEditovat

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 snažší prosazení firemních standardů bez větších diskuzí.

OdsazováníEditovat

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

Č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.

MezeryEditovat

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átoryEditovat

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ýchEditovat

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í odkazyEditovat

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