09. Ключевые слова и идентификаторы
2019-04-08, 5:22 PM

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++. Мы можем определять идентификаторы любыми словами/именами. Тем не менее, есть несколько общих правил, которые необходимо соблюдать:

  •    Идентификатор не может быть ключевым словом. Ключевые слова зарезервированы.
  •    Идентификатор может состоять только из букв (нижнего или верхнего регистра), цифр или символов подчёркивания. Это означает, что все другие символы и пробелы — запрещены.
  •    Идентификатор должен начинаться с буквы (нижнего или верхнего регистра). Он не может начинаться с цифры.
  •    C++ различает нижний регистр от верхнего. nvalue отличается от nValue и отличается от NVALUE.

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

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

1  int value; // корректно

2  int Value; // некорректно (должно начинаться с буквы в нижнем регистре)

3  int VALUE; // некорректно (должно начинаться с буквы в нижнем регистре)

4  int VaLuE; // некорректно (должно начинаться с буквы в нижнем регистре)

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

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

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

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;

Категория: C++ теория | Добавил: shadrinuro
Просмотров: 159 | Загрузок: 0 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar