Nazwy i słowa kluczowe w C++
Nazwa (identyfikator) składa się ze znaków i cyfr. Pierwszy znak musi być literą, przy czym do liter zalicza się też znak podkreślenia (_). W języku C++ brak ograniczeń dotyczących długości nazw, ale niektóre części implementacji nie są pod kontrolą twórcy kompilatora (zwłaszcza konsolidator) i niestety w tych częściach czasami są ustalane limity. Ponadto niektóre środowiska wykonawcze wymuszają rozszerzenie lub ograniczenie zestawu znaków akceptowanych w identyfikatorach. Rozszerzenia (np. zezwolenie na używanie znaku $) sprawiają, że programy przestają być przenośne. Słowa kluczowe języka C++, np. new i int, nie mogą być używane jako nazwy konstrukcji definiowanych przez użytkownika. Oto kilka przykładów poprawnych nazw:
DEFINED foO bAr u_nazwa PiataKlepka
var0 var1 CLASS _class ___
A to są przykłady sekwencji znaków, które nie mogą służyć jako identyfikatory:
pay.due foo˜bar .name if
Znak podkreślenia na początku nielokalnych nazw jest zarezerwowany dla specjalnych składników implementacji i środowiska wykonawczego i dlatego nie należy go używać w ten sposób w swoich programach. W podobny sposób zarezerwowane są też nazwy zaczynające się od dwóch znaków podkreślenia (__) oraz znaku podkreślenia i wielkiej litery (np. _Foo) — iso.
Analizując tekst programu, kompilator zawsze szuka najdłuższego łańcucha znaków, który może reprezentować nazwę. Dlatego var10 to pojedyncza nazwa, a nie nazwa var i wartość 10. Podobnie elseif to jedna nazwa, a nie słowa kluczowe else i if. Wielkie i małe litery są rozróżniane, więc Liczba i liczba to dwie różne nazwy, ale lepiej nie tworzyć tak podobnych do siebie nazw, bo łatwo się pomylić. Ogólnie rzecz biorąc, nie należy stosować bardzo podobnych nazw. Na przykład w niektórych czcionkach trudno jest
odróżnić wielką literę O od zera, podobnie jak małą literą l (L) trudno czasami odróżnić od wielkiej litery I oraz cyfry 1. W związku z tym nazwy l0, lO, l1, ll oraz I1l nie są dobrym wyborem. Problem ten nie dotyczy wszystkich czcionek, ale jest obecny w wielu z nich.
Nazwy znajdujące się w dużych zakresach powinny być w miarę długie i opisowe, np. vector, Window_with_border czy Department_number. Natomiast nazwy należące do niewielkich zakresów powinny być krótkie i konwencjonalne, np. x, i czy p. Do ograniczania zakresu można wykorzystywać funkcje, klasy i przestrzenie nazw. Ponadto dobrze jest, gdy często używane nazwy są krótkie, a rzadziej używane - dłuższe.
Nazwa powinna odzwierciedlać znaczenie nazywanej jednostki, a nie jej implementację. Na przykład nazwa phone_book jest lepsza niż number_vector, nawet jeśli numery telefoniczne są przechowywane w wektorze. Nie należy do nazwy dodawać informacji o typie (np. pcname dla typu char* czy icount dla licznika typu int), chociaż zwyczaj taki jest pielęgnowany w językach o dynamicznej i luźnej kontroli typów:
- Określenie typu w nazwie obniża poziom abstrakcji programu. W szczególności uniemożliwia programowanie ogólne (którego podstawą jest możliwość odnoszenia się nazw do jednostek różnych typów).
- Kompilator lepiej radzi sobie z zapamiętywaniem nazw niż człowiek.
- Jeśli trzeba zmienić typ nazwy (np. użyć std::string), to konieczne jest zmienienie każdego jej wystąpienia w programie (albo określenie typu będzie wprowadzać w błąd).
- Każdy system skrótów nazw typów, jaki wymyślisz, stanie się kulą u nogi, gdy zaczniesz używać dużej liczby typów do różnych celów.
Wybór właściwych nazw to sztuka.
Staraj się zachować spójny styl nazewnictwa. Na przykład identyfikatory typów zdefiniowanych przez użytkownika mogą zaczynać się wielką literą, a nazwy jednostek nie będących typami — małą (np. Shape i current_token). Ponadto nazwy makr pisz w całości wielkimi literami - jeśli w ogóle musisz używać makr, np. HACK - i nigdy nie rób tego w przypadku nazw innych składników programu (dotyczy nawet stałych). Do oddzielania słów w identyfikatorach używaj znaku podkreślenia. Nazwa number_of_elements jest bardziej czytelna niż numberOfElements. Niestety trudno jest zapewnić absolutną spójność, bo większość programów składa się z części pochodzących z różnych źródeł, a w użyciu jest kilka różnych równie dobrych stylów pisania kodu. Dbaj o spójność stosowanych skrótów. Pamiętaj, że w bibliotece standardowej nazwy typów są napisane małymi literami. Można to wykorzystać jako wskazówkę, że określona nazwa pochodzi właśnie z biblioteki standardowej.
Słowa kluczowe
Oto tabela zawierająca słowa kluczowe języka C++:
alignas alignof and and_eq asm auto
bitand bitor bool break case catch
char char16_t char32_t class compl const
constexpr const_cast continue decltype default delete
do double dynamic_cast else enum explicit
extern false float or friend goto
if inline int ong mutable namespace
new noexcept not not_eq nullptr operator
or or_eq private protecte public register
reinterpret_cast return short signed sizeof static
static_assert static_cast struct switch template this
thread_local throw true try typedef typeid
typename union unsigned using virtual void
volatile wchar_t while xor xor_eq
Ponadto zarezerwowane jest słowo kluczowe export, które będzie używane w przyszłości.
Język C++. Kompendium wiedzy. Wydanie IV, Autor: Bjarne Stroustrup, Wydawnictwo: Helion