Мова C++ має зарезервований набір з 84 слів (включаючи версію С++17) для власного використання. Ці слова називаються ключовими словами, кожне з яких має своє особливе значення.
Ось список всіх ключових слів в мові C++ (включаючи C++17):
alignas (C++11) alignof (C++11) and and_eq asm auto bitand bitor bool break case catch char char16_t (C++11) char32_t (C++11) class compl const constexpr (C++11) const_cast continue |
decltype (C++11) default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable |
namespace new noexcept (C++11) not not_eq nullptr (C++11) operator or or_eq private protected public register reinterpret_cast return short signed sizeof static static_assert (C++11) static_cast |
struct switch template this thread_local (C++11) throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while xor xor_eq |
В версії C++11 також було додано два спеціальних ідентифікатори: override
і final
. Вони мають особливе значення при використанні в певних контекстах, але не є зарезервованими ключовими словами.
Ми вже стикалися з деякими ключовими словами, такими як int
, void
і return
. Разом з набором операторів, ключові слова визначають всю мову програмування C++ (не включаючи команд препроцесора). Оскільки вони мають особливі значення, то різні IDE виділяють/підсвічують їх різними кольорами.
До кінця цих уроків по С++ ви дізнаєтесь суть більшості з вищезазначених ключових слів.
Ідентифікатори
Ідентифікатор — це ім’я змінної, функції, класу або іншого об’єкту в C++. Ми можемо визначати ідентифікатори будь-якими словами/іменами. Тим не менш, є кілька загальних правил, яких необхідно дотримуватися:
Правило №1: Ідентифікатор не може бути ключовим словом. Ключові слова зарезервовані.
Правило №2: Ідентифікатор може складатися тільки з букв (нижнього або верхнього регістру), цифр або символів підкреслення. Це означає, що всі інші символи та пробіли заборонені.
Правило №3: Ідентифікатор повинен починатися з літери (нижнього або верхнього регістру). Він не повинен починатися з цифри.
Правило №4: Мова C++ розрізняє нижній регістр від верхнього. nvalue
відрізняється від nValue
і відрізняється від NVALUE
.
Тепер, коли ви знаєте, як можна називати об’єкти, давайте поговоримо про те, як їх потрібно називати.
По-перше, в C++ імена змінних починаються з літери в нижньому регістрі. Якщо іменем змінної є одне слово, то це слово повинно бути записано в нижньому регістрі:
1 2 3 4 5 |
int value; // коректно int Value; // некоректно (повинно починатися з літери в нижньому регістрі) int VALUE; // некоректно (повинно починатися з літери в нижньому регістрі) int VaLuE; // некоректно (повинно починатися з літери в нижньому регістрі) |
Як правило, імена функцій також починаються з літери в нижньому регістрі (хоча не завжди). Ми будемо дотримуватися цього стилю, оскільки навіть функція main() (головна функція у всіх програмах) починається з букви в нижньому регістрі, як і всі функції зі Стандартної бібліотеки C++.
Імена ідентифікаторів, які починаються з великої літери, використовуються для структур та класів (про це пізніше).
Якщо ім’я змінної або функції складається з декількох слів, то є два варіанти: розділити підкресленням або використовувати принцип CamelCase — коли декілька слів пишуться разом, без пробілів, і кожне нове слово пишеться з великої літери. CamelCase (в перекладі як «ВерблюжийСтиль») отримав свою назву через використання великих літер, які нагадують верблюжі горби.
1 2 3 4 5 6 7 8 9 10 11 |
int my_variable_name; // коректно (розділяється символом підкреслення) void my_function_name(); // коректно (розділяється символом підкреслення) int myVariableName; // коректно (використовується CamelCase) void myFunctionName(); // коректно (використовується CamelCase) int my variable name; // некоректно (пробіли заборонені) void my function name(); // некоректно (пробіли заборонені) int MyVariableName; // працює, але не рекомендується (варто починати з літери в нижньому регістрі) void MyFunctionName(); // працює, але не рекомендується |
Хоча навіть Стандартна бібліотека C++ використовує символ підкреслення для змінних і функцій, ми все ж будемо використовувати CamelCase для кращої читабельності коду. Іноді ви будете бачити поєднання двох способів: підкреслення для змінних і CamelCase для функцій.
Варто відзначити, що якщо ви працюєте з чужим кодом, то хорошою практикою буде дотримуватися стилю, в якому написаний цей код, навіть якщо він не відповідає вищевказаним рекомендаціям.
По-друге, не починайте ваші імена з символу підкреслення, тому що такі імена вже зарезервовані для операційної системи, бібліотек і/або використовуються компілятором.
По-третє, (це, мабуть, найважливіше правило з усіх) використовуйте в якості ідентифікаторів тільки ті імена, які реально описують те, чим є об’єкт. Дуже характерно для недосвідчених програмістів скорочувати назви змінних, щоб заощадити час при наборі коду або тому що вони думають, що все і так зрозуміло. У більшості випадків не все завжди є зрозумілим і очевидним. В ідеалі, змінні потрібно називати так, щоб людина, яка перший раз побачила ваш код, зрозуміла якнайшвидше, що цей код виконує. Через 3 місяці, коли ви будете переглядати свої програми, ви забудете, як вони працюють, і будете вдячні самому собі за те, що називали змінні по суті, а не “як попало”. Чим складніший код, тим простішими і зрозумілішими повинні бути ідентифікатори.
int ccount | Погано | Ніхто не знає, що таке ccount. |
int customerCount | Добре | Тепер зрозуміло, що ми рахуємо. |
int i | Погано* | В більшості нетривіальних випадках — погано, в простих прикладах — може бути (наприклад, в циклах). |
int index | 50/50 | Добре, якщо очевидно, індексом чого є змінна. |
int totalScore | Добре | Все зрозуміло. |
int _count | Погано | Не починайте імена змінних з символу підкреслювання. |
int count | 50/50 | Добре, якщо очевидно, що ми рахуємо. |
int data | Погано | Який тип даних? |
int value1, value2 | 50/50 | Може бути складно зрозуміти різницю між змінними. |
int numberOfApples | Добре | Все зрозуміло. |
int monstersKilled | Добре | Все зрозуміло. |
int x, y | Погано* | В більшості нетривіальних випадків — погано, в простих прикладах — може бути (наприклад, в математичних функціях). |
*Примітка: Можна використовувати тривіальні імена для змінних, які мають тривіальне використання (наприклад, для змінних в циклі, в простих математичних функціях тощо).
По-четверте, уточнюючий коментар завжди буде тільки плюсом. Наприклад, ми оголосили змінну з ім’ям numberOfChars
, яка повинна зберігати кількість символів певної частини рядка. Скільки символів в рядку Hello, world!
: 10, 11, 12 чи 13? Це залежить від того, враховуємо ми пробіли і розділові знаки чи ні. Замість того, щоб називати змінну numberOfCharsIncludingWhitespaceAndPunctuation
, краще записати хороший коментар поруч, який прояснить ситуацію:
1 2 |
// Ця змінна рахує кількість символів частини рядка, включаючи пробіли і розділові знаки int numberOfChars; |
Тест
Які з наступних змінних неправильно названі і чому?
int result;
int _oranges;
int NUMBER;
int the name of a variable;
int TotalCustomers;
int void;
int countFruit;
int 4orYou;
int kilograms_of_pipe;
Відповідь
int result
. Все ок.
int _oranges
. Імена змінних не повинні починатися з символів підкреслення.
int NUMBER
. Імена змінних повинні починатися з літери в нижньому регістрі.
int the name of a variable
. Імена змінних не можуть мати пробіли.
int TotalCustomers
. Імена змінних повинні починатися з букви в нижньому регістрі.
int void
. void — це ключове слово і його не можна використовувати в якості ідентифікатора для своїх змінних чи функцій.
int countFruit
. Все ок.
int 4orYou
. Імена змінних не можуть починатися з цифр.
int kilograms_of_pipe
. Все ок.