Молодые программисты при изучении языка программирования С часто встречают такие термины, как «boolean», «bool», «enum», но не всегда понимают, что это и когда их использовать. Сегодня мы исправим ситуацию и поговорим об этих терминах.
«Boolean» и «bool» — это термины, обозначающее одно и то же. Они указывают на то, что тип данных принадлежит к логическому типу. «Bool» — это сокращение от «boolean». Используется непосредственно в коде, когда программисту нужно взаимодействовать с логическим типом данных. Термин «boolean» чаще используется в разговоре, когда нужно указать, что речь идет именно о логических (булевых) данных.
Термин «enum» относится к перечисляемым типам данных. В числе перечисляемых типов данных могут быть строки или числа. Это довольно специфический идентификатор.
Теперь давайте остановимся на каждом термине и типе данных немного поподробнее.
«Boolean», «bool» в С — что это такое?
Итак, мы выяснили, что оба термина, «boolean» и «bool», имеют одно и то же назначение — указать программисту, что речь идет о логическом типе данных. Логический тип данных использует двоичную логику. То есть такие данные могут быть только в двух значениях:
«true», оно же «1» или «истина»;
«false», оно же «0» или «ложь».
В коде С такие типы данных декларируются ключевым словом «bool». Например, мы хотим объявить, что переменная «х» будет «булевая», тогда в коде будет так:
bool x;
Когда имеет смысл применять такой тип данных? Как и в реальной жизни, такой тип данных применяется, когда нужно получить однозначный ответ: «да» или «нет». Например, в жизни вам нужно решить, что вам попало в руки: «фрукт» или «овощ». «Слива» — это фрукт? Да, это истина. Тогда упаковываем в ящик и отправляем на завод по переработке фруктов. «Помидор» — это фрукт? Нет, это ложь. Тогда пока оставляем «помидор» на складе.
Подобные конструкции в программировании очень распространены. Именно поэтому для них был разработан логический тип данных «boolean», который обозначается ключевым словом «bool».
Даже в нашем словесном примере с фруктами мы использовали конструкцию «если это, тогда то». В программировании происходит то же самое. Булевый тип данных очень часто применяется в конструкции «if...else» вместе с логическими операторами равенства, неравенства, больше/меньше. Например:
bool fruit = true;
if (fruit == prune)
cout < < " `prune` is fruit" << endfl;
else
cout <<"`prune` is not a fruit" endfl;
Мы показали простейший пример и конструкцию с использованием булевых переменных и значений. В реальном программировании многое основывается на значениях «true» и «false», поэтому кодовые конструкции могут быть очень громоздкими.
Перечисляемый тип данных «enum»
Термин «enum» происходит от английского «enumeration». Несложно догадаться, что перечисляемый тип данных применяется, когда программисту нужно что-то перечислить. Оттого что это «что-то» точно не определено, тип данных «enum» считается довольно специфическим и слабо определенным. Точно можно сказать, что все перечисляемые данные определяются как набор идентификаторов и должны являться целыми константами с удобными обозначениями.
Переменная перечисляемого типа может примерять на себя величины только из перечисленного списка определенных констант.
Например, тип данных «enum» может выглядеть вот так:
enum WinterMonth {DECEMBER, JANUARY, FEBRUARY};
Поясним запись перечисляемого типа данных:
«WinterMonth» — это идентификатор перечисления, имя идентификатора всегда начинается с большой буквы;
«DECEMBER, JANUARY, FEBRUARY» — это перечислители, они всегда пишутся заглавными буквами; перечислители не могут повторяться в разных перечислениях одного кода;
в конце перечисления всегда стоит точка с запятой;
каждому перечислителю в автоматическом режиме присваивается целочисленный идентификатор (значение), начиная с «0», то есть: «DECEMBER» — «0», «JANUARY» — «1», FEBRUARY — «2»;
если нужно, тогда можно каждому перечислителю задать собственный идентификатор, например, это будет выглядеть так: «enum WinterMonth {DECEMBER = 5, JANUARY = 6, FEBRUARY = 7};».
Важная особенность: если попытаться вывести значения перечислителей через стандартное «std::cout», тогда на экран выведется только целочисленный идентификатор (значение) перечислителя, а не сам перечислитель. Для того чтобы вывести сам перечислитель, нужно воспользоваться конструкцией «if...else».
Например:
enum WinterMonth {DECEMBER, JANUARY, FEBRUARY};
void printMonth(WinterMonth wintermonth)
{
if (wintermonth == DECEMBER)
std::cout << "December";
else if (wintermonth == JANUARY)
std::cout << "January";
else if (wintermonth == FEBRUARY)
std::cout << "February"
else
std::cout << "What month?";
}
Заключение
Теперь вы познакомились с такими терминами, как «boolean», «bool» и «enum», и знаете, что это такое и к какому типу данных относится. Часто эти два типа данных конкурируют между собой, потому что предлагают программисту осуществить программный выбор между значениями. Проблема в том, что «boolean» позволяет выбирать только между «true» и «false», а это два взаимоисключающих состояния. Поэтому, если вы уверены, что у объекта может быть только 2 состояния, тогда этот тип значений актуально использовать. Например, как в нашем примере со сливой — она либо фрукт, либо нет.
Однако бывают такие случаи, когда состояния у объекта меняются или расширяются. В таких случаях рекомендуют использовать конструкцию «enum», потому что с «boolean» можно попасть в трудную ситуацию. В следующих статьях мы обязательно разберем такую ситуацию.
Другое