Урок №16. Ключевые слова и идентификаторы

  Юрий  | 

  |

  Обновл. 24 Янв 2022  | 

 149127

 ǀ   30 

Язык 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 всегда выделяют/подсвечивают их другим цветом.

После изучения материалов всех уроков по С++ на Ravesli, вы узнаете суть большинства ключевых слов языка С++, приведенных выше.

Идентификаторы

Идентификатор — это имя переменной, функции, класса или другого объекта в языке C++. Мы можем определять идентификаторы любыми словами/именами. Тем не менее, есть несколько общих правил, которые необходимо соблюдать:

   Идентификатор не может быть ключевым словом. Ключевые слова зарезервированы.

   Идентификатор может состоять только из букв (нижнего и верхнего регистра) латинского алфавита, цифр и символов подчёркивания. Это означает, что все другие символы и пробелы — запрещены.

   Идентификатор должен начинаться с буквы (нижнего или верхнего регистра). Он не может начинаться с цифры.

   Язык C++ различает нижний регистр от верхнего. nvalue отличается от nValue и отличается от NVALUE.

Теперь, когда вы знаете, как можно называть объекты, давайте поговорим о том, как их нужно называть.

Во-первых, в языке C++ имена переменных начинаются с буквы в нижнем регистре. Если имя переменной состоит из одного слова, то это слово должно быть записано в нижнем регистре:

Как правило, имена функций также начинаются с буквы в нижнем регистре (хотя есть некоторые разногласия по этому вопросу). Мы будем придерживаться этого стиля, поскольку даже функция main() (главная функция всех программ) начинается с буквы в нижнем регистре, как и все функции из Стандартной библиотеки C++.

Имена идентификаторов, которые начинаются с заглавной буквы, используются для структур, классов или перечислений (об этом позже).

Если имя переменной или функции состоит из нескольких слов, то здесь есть два варианта: разделить подчёркиванием или использовать CamelCase — принцип, когда несколько слов пишутся слитно, без пробелов, и каждое новое слово пишется с заглавной буквы. CamelCase (в переводе как «ВерблюжийСтиль») получил свое название из-за заглавных букв, которые напоминают верблюжьи горбы.

Хотя даже Стандартная библиотека 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 лучше оставить хороший комментарий, который прояснит ситуацию:

Тест


Какие из переменных неправильно названы и почему?

   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. Всё ок.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (1 387 оценок, среднее: 4,92 из 5)
Загрузка...

Комментариев: 30

  1. Alan:

    Считаю, что вы указали стили именования не верно.

    myVariable — camel case
    MyVariable — pascal case
    My_Variable / my_variable — snake case
    MY_VARIABLE — upper snake case
    MYVARIABLE — uppercase
    myvariable — lowercase

  2. екатерина:

    Подскажите, а вариант идентификатора my-function1 является правильным?

    1. EF:

      Нет, в идентификаторах С++ нельзя использовать "-", только нижнее подчёркивание "_". "-" обозначает операцию вычитания, поэтому my-function1 интерпретировалось бы как "вычти из значения my значение function1".

  3. vova1227:

    Прошу пояснить. Это личное предпочтение автора или я не понял чего то. Мне кажется это кому как удобно, вопрос только в работоспособности, или я не прав?

    1. Фото аватара Юрий:

      Есть определенные практики программирования. Названия функций и переменных с маленькой буквы является признаком хорошего тона, более детально об этом рассказывается в уроке.

      На работоспособность программы названия идентификаторов с большой или маленькой буквы никак не влияет.

      1. Матвей:

        Получается, что все, кто пишут на C# — имеют плохой вкус?)
        Любой стиль программирования является хорошим или плохим в зависимости от контекста.
        Есть CamelCase, pascaleCase, snack_case

        1. Константин:

          Эй, Матфей! C# — это уже чужой монастырь!

  4. Юлия:

    Юрий, скажите, пожалуйста, а есть где-то расшифровка всех ключевых слов и всех операторов? Их значение, и где они могут применяться? Заранее спасибо.

    1. SergGray:

      Например сдесь — Working Draft, Standard for Programming
      Language C++
      Около 2000 страниц мелкого английского текста…
      Легко ищется в Google…

  5. Александр:

    Спасибо Юрий! Понимание начинается когда изучаешь постоянно и систематически. Мне нравится то как вы делаете уроки.

    1. Фото аватара Юрий:

      Пожалуйста 🙂

      1. Вячеслав:

        Спасибо за уроки. Все здорово. Но, вот в этом уроке наткнулся на странные утверждения, а именно:
        "Во-первых, в C++ имена переменных начинаются с буквы в нижнем регистре. Если имя переменной состоит из одного слова, то это слово должно быть записано в нижнем регистре."
        Это более, чем странно, потому как у самого Страуструпа четко написано, что именем может быть любое слово, состоящее из букв и цифр, первым символом является буква. Регистр значения не имеет. Допускается символ подчеркивания.

        Объясните, пожалуйста.

        1. Фото аватара Юрий:

          Вы можете называть переменные как хотите и чем хотите, в уроке указаны просто рекомендации.

        2. Вячеслав:

          Юрий, спасибо. Я примерно так и предполагал, что это рекомендуемые варианты именования. Однако меня ввело в заблуждение отражение примера с надписями "некорректно".
          Еще раз спасибо за оперативный ответ.

        3. Фото аватара Юрий:

          Пожалуйста 🙂

  6. Данила:

    Вы пишите что нельзя использовать ключевые слова в названиях функций. Но я видел как у вас в примере использовалось слово = ретурн . Оно слово ключевое . какое этому объяснение ?
    int return7() — вот этот пример из урока 12.

    1. Константин:

      Данила, скажи-ка мне, например, чем отличается ник "Данила" от "Данила7"? Сообразил?;-)

  7. Фото аватара Юрий:

    Сайт с которого ведется перевод указан на странице «Уроки С++» в самом конце страницы — LearnCpp.com

  8. Александр:

    Добрый день!
    Уроки действительно интересны и доходчиво изложены! Спасибо!
    Я сам программист 1С (около 5 лет) и мне захотелось научиться писать доработки для 1С в виде внешних dll компонент.
    Есть краткий гайд на инфостарте, но он для MS Visual C++ 6.0 — infostart.ru/public/16916/
    А вот для Visual C++ 2017 не разобрался как создать.
    Нужно, чтобы на выходе получилась DLL с некоторой функцией (например генератор случайных чисел), к которой можно обратиться из вне. Чтобы получилось ее зарегистрировать через regsvr32.exe.
    Если есть возможность ткните носом, где и что изучить надо?

    1. Фото аватара Юрий:

      Привет. Честно, не сталкивался с подобным. Спросите на stackoverflow или Тостере.

      1. Александр:

        Ясно.
        А как там на stackoverflow затусить?
        Что это за портал такой? Просто форум с ответами на вопросы или что-то большее?
        Не могли бы вы рассказать в паре статей какие ресурсы сильно облегчают жизнь программистам C++ например.
        1. Что за stackoverflow и есть ли русскоязычный аналог?
        2. До недавнего времени не знал, что есть онлайн-компиляторы, пока один из пользователей вашего сайта не отписался в комментариях о выполненном задании.
        onlinegdb.com — Тоже очень интересный ресурс: получается можно и код отладить и скинуть ссылку на него?
        3. Чем еще можно пользоваться? Есть ли какие-нибудь mind-map для запоминания основных операторов?
        4. Есть ли мобильные приложения, облегчающие изучение/работу в среде C++?
        5. И вообще хотелось бы увидеть конкретную работу: Например взять какой-то мини-проект трудоемкостью на 1-2 часа. (есть такие на фриланесе или не бывает??) Выложить его техническое задание и по шагам реализацию проекта.
        Т.е. после вашего пособия каков примерный уровень программиста C++ будет и можно ли браться за какую-то работу или нужно углубляться в какие-то области?

        1. Фото аватара Юрий:

          Спасибо за столь ценный и развернутый комментарий.

          1. Есть русский ресурс вопросов/ответов в сфере ИТ — Тостер. Но есть и русская версия StackOverflow — ru.stackoverflow.com.

          2. Есть onlinegdb, есть еще сервис Pastebin для хранения и распространения кода (но это не компилятор C++).

          3-4-5. Насчет mind-map и мобильных приложений пока что ничего не могу посоветовать. Насчет конкретного проекта — эта мысль давно уже крутится в голове. Можно будет сделать. Но на это всё нужно время и ресурсы.

          В ближайшем времени планирую выпустить несколько общих статей о программировании с советами для новичков, где будут рассматриваться и сервисы и рекомендации, и нюансы. Всё будет, но не сразу, а постепенно.

        2. Александр:

          По поводу ресурсов — у вас даже нет кнопки типа "поддержать проект". Непорядок =))
          Все отзывы у вас в основном положительные, я думаю многие не против будут отблагодарить авторов.
          По поводу мотивации — я думаю интересно многим будет увидеть реальный проект, который из урока в урок будет обрастать новыми подробностями.
          Например создание мини-игры (насколько можно это реализовать — не знаю) Перемещение фигуры по экрану. Т.е. что-то, что можно будет пощупать в результате прохождения доброй половины курса.
          А еще лучше скомпилировать эту мини-игру под андроид. Я думаю желающих у вас прибавится.

        3. Фото аватара Юрий:

          Как я уже говорил, для этого нужно время и ресурсы (здесь упор больше на приложенные усилия). Я еще не закончил перевод этого курса по C++ и сразу перебегать на второй цикл статей, не закончив предыдущий — это просто того не стоит. В будущем можно будет что-то придумать. Пока что нужно довести первое дело до конца.

          P.S. Если будут желающие поделиться своим опытом разработки каких-либо проектов и напишут цикл статей об этом раньше, чем я закончу перевод уроков — без проблем, опубликую.

  9. Erding:

    Очень нравятся уроки, поскольку всё понятно описано даже для людей, знакомых с этим достаточно плохо.
    Я хотел спросить совета у Вас:
    В свои 15-ть лет, я безумно хочу обучиться программированию на языке C++. Читаю абсолютно все Ваши уроки полностью, а также прочитал весь курс введения. Но часто, я просыпаюсь с мыслью, что я опять забыл тот или иной код. Я нахожу свободное время, сажусь, снова перечитываю урок, записываю это где-нибудь, но не могу выйти на более-менее автоматический режим. (Без заметок, подсказок.) Это, иногда, попросту угнетает, отбивая при этом желание продолжать.
    Подскажите, пожалуйста, что нужно делать, для лучшего запоминания информации, которую я получаю с Ваших уроков?

    1. Фото аватара Юрий:

      Помнить всё и не нужно. Сомневаюсь, что есть программисты, которые запоминают всю, однажды полученную, информацию раз и на всю жизнь. Это нормально, всё не выучишь и не запомнишь. Главное — понять суть, получить базис (фундамент) знаний, а всё остальное — это практика. Ведь для создания программы Вам нужно реализовать теорию, т.е. написать код, исходя из своих знаний. Отсюда и вытекает факт, что для лучшего запоминания чего-либо — нужно это применить на практике. Прочитали урок — применили на практике. Хорошим вариантом будет написания своей программы или игрушки (небольшой, простенькой), можно попробовать найти на YouTube видео-уроки в стиле «Как написать/создать игру на С++» и повторять код. А если Вы забыли какой-то термин, понятие или правило, то это не страшно — зашли в Интернет, перечитали, вспомнили. И, как уже было сказано, всё не выучишь и не запомнишь, а практическое применение знаний — самый лучший вариант запоминания информации.

  10. Сергей:

    По мере продвижения по уроках с++ , количество оценок заметно
    уменьшылось.

    1. Фото аватара Юрий:

      Далеко не все продолжают учиться, мотивация кончилась, так всегда 🙂

      1. Андрей:

        А некоторые "на автомате" продолжают упорно не замечать кнопок оценки 🙂
        Ибо привыкли, что потребуют регу (в результате которой почту завалят спамом (бедные мои спамоприемники)), какие-нибудь репосты или вообще вылезет/попытается вылезти очередная ужасная реклама какого-нибудь мыла/яндекса… о_о
        В общем пойду проголосую за все статьи, что прочитал 🙂 Надеюсь это кому-то важно 🙂
        Ну и да, спасибо за перевод. Коротко и понятно 🙂

        1. Фото аватара Юрий:

          В некоторых вообще могут быть блокираторы оценок и кнопок шеринга — и их тоже можно понять. Спасибо, что читаете 🙂

Добавить комментарий для Константин Отменить ответ

Ваш E-mail не будет опубликован. Обязательные поля помечены *