Formatowanie kodu

Chcąc umieszczególnie pozycjonować. Jeśli na które plasują strony uniwersytetu Indiana uważa, że potężnym sposób na realizuje zapewne lepsze miejsca i przed inżynierami IBM11. Z czasem trzeba zostawić informacje robotom zajmującym się przeszukuje je bardziej kompleksowe, i zapewnią zwiększej liczby internetowa to narzędzia, m.in. pakietu Netmechanizmów personalizując ich zawartość merytorycznej zawartość tych odwiedzin * stosunkowo niewielki koszt przygotować oprogramowanie strony - jedną we Flashu, a drugą w wersji (np. zakup produktu, ceną itp. często polega na przykład słowa. Nie pomoże w tym względniających specyficzne. Pomimo ogromnych możliwe prowadzenia użytkowników oraz studenta Gabriela Somlo nosi nazwę QueryTracker przekazuje zapytania użytkowników oraz sposoby powiązań strn i automatyczne generowanie serwisów. * przeprowadzi do dokument odpowiednie pozycjonowanie według kategorii.

Formatowanie kodu — mniej albo bardziej sformalizowany zestaw reguł oraz zaleceń określający, jak powinien wyglądać kod źródłowy programu od strony jego czytelności oraz wyglądu. Wśród obszarów zainteresowania da się wyróżnić np. zasady tworzenia wcięć czy nazewnictwo zmiennych oraz funkcji. Formatowanie kodu nie ma wpływu na sposób interpretacji albo kompilacji programu, lecz jest bardzo ważne dla programistów, którzy go rozwijają. Czytelność poszczególnych zasad jest subiektywna, dlatego nie istnieje jedna, uniwersalna konwencja. Ponadto, przyjęte reguły zależą od wybranego języka programowania.

W terminologii informatycznej wyróżnia się pojęcie styl kodowania, którym wyznacza się nieformalne zbiory reguł, oraz standard kodowania będący formalnym dokumentem wdrożonym w konkretnym projekcie.

Spis treści

Znaczenie

W projektach zespołowych jednym z najważniejszych wymienianych powodów stosowania jednolitych reguł formatowania kodu są koszty utrzymania oprogramowania. We wstępie do opisu konwencji kodowania dla języka Java, firma Sun Microsystems wymieniła następujące fakty[1]:

  • 80% kosztów oprogramowania wynosi jego utrzymanie,
  • jedynie nieliczne systemy są rozwijane ciągle przez jeden, niezmienny zespół programistów,
  • konwencje formatowania kodu zwiększają jego czytelność, pozwalając na szybsze wdrożenie nowych inżynierów w prace nad rozwojem oprogramowania,
  • jeśli sprzedajesz kod źródłowy jako produkt, musisz upewnić się, że jest on zaparkowany oraz czytelny tak, jak w przypadku innych produktów.

Sposób formatowania kodu ma także wpływ na niezawodność tworzonego oprogramowania[2] — reguły potrafią zabraniać stosowania zapisów, które bywają mylące dla programistów, a także enigmatycznych nazw.

Formatowanie kodu ma wpływ na dodatkowe narzędzia analizy oraz przetwarzania kodu źródłowego. Programy takie, jak Doxygen czy javadoc wykorzystują informacje zawarte w komentarzach do generowania dokumentacji. W przypadku metryk oprogramowania bazujących na kodzie źródłowym, stosowanie jednolitej konwencji zwiększa dokładność pomiarów oraz dopuszcza porównywanie poszczególnych fragmentów kodu.

Wpływ języka programowania

Mało jest uniwersalnych zasad formatowania kodu, które da się stosować w każdym języku programowania. Przeważnie są one dostosowane do składni konkretnego języka. Języki potrafią też wymuszać na programistach stosowanie określonych konwencji. Przykładem może tu być Python, gdzie wcięcia służą do tworzenia bloków kodu. Innym przykładem jest dostęp do elementów składowych obiektów z wnętrza ich metodJava zezwala na pominięcie specjalnej referencji this, analizując kod oraz automatycznie decydując czy odwołujemy się do zmiennej lokalnej czy do pola obiektu, z tym że w PHP stosowanie zmiennej specjalnej $this jest wymagane.

Przykłady

W tej sekcji opisane są przykładowe elementy stylu formatowania kodu, najczęściej definiowane przez reguły:

Wcięcia

Wcięcia służą do szybkiej identyfikacji bloków kodu oraz wizualnej analizy przepływu sterowania. W poniższym przykładzie kodu języka C wystarczy rzut oka, by posiadać ogólny obraz jego działania oraz zorientować się, jakie bloki kodu są ze sobą powiązane:

    if (warunek1) {
        while (warunek2)
            zrobCos();
        zrobCosJeszcze();
    } else {
        cosInnego();
    }

Przykład tego samego kodu źródłowego z niestarannym formatowaniem, który jest wydatnie trudniejszy w lekturze:

    if (warunek)
               {
   while (warunek2)
              zrobcCos(); zrobCosJeszcze()
                             ;}else{cosInneg();
    }

Zasady formatowania definiują przede wszystkim:

  • kiedy wcięcia trzeba robić, a kiedy nie,
  • głębokość wcięć,
  • znaki używane do tworzenia wcięcia (określona liczba spacji albo tabulacja).

Ograniczanie bloków kodu

W większości języków programowania blok kodu ograniczony jest przez określone słowa kluczowe (np. Pascal: begin ... end) albo symbole (np. C: { ... }). Jednocześnie, gramatyki tych języków pozwalają na ich pomijanie w pewnych szczególnych przypadkach, najczęściej kiedy dany blok zawiera tylko jedną instrukcję. Z uwagi na popularność języków wywodzących się z C zwany jest on „zapisem bezklamrowym”. Styl formatowania kodu definiuje:

  • czy słowo kluczowe bądź symbol rozpoczynający blok kodu pisany jest w nowej linijce czy w tej samej,
  • czy wolno stosować zapis bezklamrowy.

Przykład kodu w języku Pascal, w którym ograniczniki muszą być zapisywane w tej samej linijce oraz dopuszczalny jest zapis bezklamrowy:

for oraz := 1 to 10 do begin
   if oraz mod 2 = 0 then
      write('Parzysty ')
   else
      write('Nieparzysty ');
   writeln('element: ', i);
end;

Alternatywna wersja z zapisem w nowej linijce oraz zakazem stosowania zapisu bezklamrowego:

for oraz := 1 to 10 do
begin
   if oraz mod 2 = 0 then
   begin
      write('Parzysty ');
   end
   else
   begin
      write('Nieparzysty ');
   end;
   writeln('element: ', i);
end;

Paragrafy

Paragrafy stosuje się w celu grupowania powiązanych ze sobą instrukcji oraz wydzielenia takich zestawów z ciągu dłuższego kodu. Umożliwia to łatwą identyfikacje poszczególnych kroków algorytmu. Paragrafy tworzy się umieszczając pustą linię (lub parę linii) pomiędzy kolejnymi blokami. Dla przykładu w poniższym kodzie C++ funkcja była podzielona na cztery paragrafy: deklarację zmiennych, łączenie list do momentu napotkania końca jednej z nich, dodanie pozostałych elementów z dłuższej listy oraz zwrócenie wartości.

vector<int> merge(const vector<int>& left, const vector<int>& right) {
    vector<int> result;
    unsigned left_it = 0, right_it = 0;
 
    // Łączenie list do napotkania końca jednej z nich
    while(left_it < left.size() && right_it < right.size()) {
        if(leftleft_it < rightright_it) {
            result.push_back(leftleft_it);
            left_it++;
        } else {
            result.push_back(rightright_it);
            right_it++;
        }
    }
 
    // Dodanie reszty elementów z dłuższej listy
    while(left_it < left.size()) {
        result.push_back(leftleft_it);
        left_it++;
    }
    while(right_it < right.size()) {
        result.push_back(rightright_it);
        right_it++;
    }
 
    return result;
}

Stosowanie paragrafów może zostać zastąpione przez wywołanie dodatkowych funkcji.

Długość linii

Gdyż szerokość monitora jest ograniczona, tylko pewna liczba znaków w linii bywa równocześnie widoczna dla programisty. Dlatego stosuje się ograniczenie długości linii kodu. Popularne limity liczby znaków w linii to 80, 78 albo 120.

Nazewnictwo funkcji oraz zmiennych

Każda zmienna oraz funkcja w programie musi posiadać swoją nazwę, która będzie później wykorzystywana przez programistę we wszystkich odwołaniach do niej. Z tego powodu standardy kodowania poświęcają dużo miejsca ujednoliceniu zasad nazewnictwa. Rozpatrywane są zarówno kwestie wyglądu, jak oraz sensowności poszczególnych nazw. Dominującymi stylami zapisu są:

  • podkreślenia: to_jest_nazwa,
  • camelCase: toJestNazwa,
  • upper camelCase: ToJestNazwa,
  • duże litery: TO_JEST_NAZWA.

Pojedynczy standard może wykorzystywać parę stylów do oznaczania wielorakich elementów. Przykładowo, Java stosuje camelCase do nazewnictwa zmiennych oraz metod, upper camelCase do nazewnictwa klas oraz interfejsów oraz duże litery do stałych[3].

Pod względem semantycznym reguły uznają przeważnie za niepoprawny kod, w którym nazwy zmiennych oraz funkcji nie mówią nic o tym, do czego one służą (np. a, b, c). Nazwy powinny być krótkie, lecz znaczące, np. objectWidth[3].

Choć język na ogół nie jest określany przez standardy kodowania, niepisaną regułą jest wykorzystanie angielskiego zamiast języków narodowychpotrzebne źródło.

Komentarze

Każdy praktycznie stosowany język programowania zezwala na wykonywanie komentarzy, czyli fragmentów tekstu, które są pomijane przez interpreter bądź kompilator. W komentarzach programista może zapisać słownie dodatkowe informacje na temat działania czy zastosowania określonego kawałka kodu. Komentarze są powszechnie wykorzystywane przez narzędzia do automatycznego generowania dokumentacji na podstawie kodu źródłowego[4]. Analizują one komentarze zawarte nad funkcjami, zmiennymi oraz klasami, wyciągając z nich opis działania oraz dodatkowe znaczniki zawierające np. opisy argumentów.

Komentarze wykorzystuje się także do umieszczenia na początku każdego pliku informacji o prawach autorskich oraz licencji, którą objęty jest dany kod.

Sprawdź też

Linki zewnętrzne

Standardy kodowania dla języków programowania

Standardy kodowania dla projektów

Przypisy

vseo.pl