Другое

Типы данных в С — bool, boolean и enum: сравнение и их возможности

Lorem ipsum dolor

Молодые программисты при изучении языка программирования С часто встречают такие термины, как «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» можно попасть в трудную ситуацию. В следующих статьях мы обязательно разберем такую ситуацию.

Схожие статьи

Мобильные приложения – конкурентное преимущество в борьбе за покупателя
Другое

Мобильные приложения – конкурентное преимущество в борьбе за покупателя

Другое

Какую часть содержит второй том IMDG Code, когда был создан этот кодекс

Другое

5 причин использовать смс-рассылку в рекламных акциях

Парное программирование: как это работает и насколько эффективно?
Другое

Парное программирование: как это работает и насколько эффективно?

×