Style formatowania kodu

W programowaniu komputerów styl wcięć jest konwencją rządzącą wizualnym zobrazowaniem bloków kodu w celu oddania struktury programu. W szczególności wcięcia są stosowane w celu pokazania wzajemnych powiązań pomiędzy kodem objętym instrukcjami warunkowymi i pętlami a kodem znajdującym się poza ich zasięgiem. Obecnie można wyróżnić kilka zdefiniowanych stylów wcięć używanych w języku C.

Styl BSD/Allmana

Styl BSD (zwany również stylem Allmana) jest chyba najpowszechniej stosowanym stylem. Wymaga on umieszczania nawiasów klamrowych, grupujących instrukcje związane z daną instrukcją warunkową, w osobnych liniach wciętych na tym samym poziomie, co instrukcja warunkowa. Same instrukcje objęte nawiasami klamrowymi powinny być wcięte na następny poziom.

x = 0;
while(x < 3)
{
  FunkcjaA();
  FunkcjaB();
  x++;
}
FunkcjaC();

Zwolennicy tego stylu uważąją, że tak przedstawiony blok kodu jest wyraźnie widoczny dzięki oddzieleniu go od pozostałego kodu przez użycie prawie pustych linii i oczywiście zastosowanie wcięć. Natomiast nawiasy klamrowe, jako właściwie przynależne do instrukcji warunkowej, są ustawione na jej poziomie. Ustawienie nawiasu zamykającego równo z nawiasem otwierającym dodatkowo pozwala na szybką lokalizację danej pary.

Jedyną wadą tego stylu jest to, że każdy z nawiasów klamrowych zajmuje całą linię kodu, nie wprowadzając żadnej dodatkowej instrukcji. Wada ta była znacząca w przypadku edycji kodu przy użyciu terminali wyświetlających tylko 24 linie. Obecnie nie ma ona większego znaczenia.

Styl K&R

Styl K&R, nazywany tak od pierwszych liter nazwisk autorów książki "The C programing language", jest również dość często spotykanym stylem. W tym stylu otwierający nawias klamrowy znajduje się zawsze w tej samej linii co instrukcja warunkowa, natomiast nawias zamykający znajduje się na tym samym poziomie, co instrukcja warunkowa. Instrukcje zgrupowane przez nawiasy są wcięte na następny poziom.

x = 0;
while (x < 3) {
  FunkcjaA();
  FunkcjaB();
  x++;
}
FunkcjaC();

Osoby preferujące ten styl jako zaletę podają fakt, że nawias otwierający nie zajmuje całej linii, a położenie nawiasu zamykającego na tym samym poziomie co instrukcja warunkowa tłumaczą jego logiczną przynależnością do instrukcji.

Jako wadę tego stylu można uznać trudność w szybkim ustaleniu położenie nawiasu otwierającego dla danego nawiasu zamykającego. Szybkie odszukanie nawiasu otwierającego można usprawnić przez stosowanie komentarzy (patrz poniższy przykład), które jednak zmniejszają czytelność kodu.

if (x < 0) {
  FunkcjaA(x);
} //if

Jako ciekawostkę można podać, że styl ten jest używany przy pisaniu kodu źródłowego jądra systemu Linux i UNIX.

Styl Whitesmithsa

W stylu Whitesmithsa nawiasy klamrowe są umieszczane w osobnych liniach i wcięte do poziomu kodu, który obejmują.

x = 0;
while (x < 3)
  {
  FunkcjaA();
  FunkcjaB();
  x++;
  }
FunkcjaC();

Zwolennicy tego stylu uważają, że nawiasy klamrowe łączą szereg deklaracji i instrukcji w jedną większą instrukcję, dlatego jako podrzędne w stosunku do instrykcji warunkowej powinny być wcięte na następny poziom, a nie pozostawać na poziomie instrukcji warunkowej. Używanie tego stylu urtudnia jednak szybkie wizualne odszukanie par nawiasów, gdyż nie rzucają się zbyt wyraźnie w oczy, zlewając się z instrukcjami, które grupują.

Styl GNU

Styl GNU jest połączeniem stylu BSD i Whitesmithsa. Zamiast umieszczać nawiasy klamrowe na poziomie instrukcji warunkowej lub grupowanych instruncji, są one umieszczane na pośrednim poziomie. Styl GNU zakłada również, że pomiedzy nazwą funkcji a nawiasami grupującymi jej argumenty powinna być umieszczana spacja.

x = 0;
while (x < 3)
  {
    FunkcjaA ();
    FunkcjaB ();
    x++;
  }
FunkcjaC ();

Jako pewną wadę tego stylu można podać fakt, że przy mocno zagłebionym kodzie, dodatkowe wcięcia dla nawiasów klamrowych mogą spowodować, że kod wcięty na dalsze poziomy będzie niewidoczny na ekranie.

Opracowano na podstawie Wikipedia.