Тернарний оператор ? : в C++

Тернарний оператор ? : в C++
4.5 (90%) 2 голосів




тернарный оператор ?: C++

Сподіваюся, ви добре розібралися з темою операторы выбора if и else і вам не склало великих труднощів вирішити задачи по цій темі. У цьому ж уроці ми продовжуємо вивчати основи програмування на C ++ і познайомимося ще з одним оператором вибору (ветвления) – це тернарный оператор ? :

Используется он обычно в тех случаях, якщо умова і код, который надо выполнить, в результате проверки условия, очень простые. К примеру, спросить у пользователя хочет он продолжить работать в программе или же хочет выйти из неё. Синтаксис такой:

тернарный оператор ?:

Спочатку треба записати необхідне нам умову і за ним поставити знак питання ? . Далі, в этой же строке, после знака вопроса пишем первую простую команду (код), которая будет выполняться, если условие вернет истину (true). Після цієї команди ставимо двокрапку : и пишем вторую команду (код). Эта вторая команда после двоеточия, выполнится только в том случае, если условие возвращает ложь (false).

Приклад. Допустим пользователь снимает деньги в банкомате. Он провел эту операцию и на экране должен появиться вопрос: “Вы хотите выполнить другую операцию?” Користувачеві залишається зробити вибір (да или нет) и нажать соответствующую кнопку. Организуем этот выбор в следующей программе:

Пользователь делает выбор и вводит значение – рядок 13. А в строке 15 мы проверяем введенное значение. якщо умова variable == 1 возвращает true (то есть если переменная действительно равна 1), то выполнится код, расположенный после знака вопроса ? . А тот, что находится после двоеточия : – игнорируется. Иначе, если пользователь ввел 0, игнорируется код расположенный между ? і : , а виконується другий код. Ось результат роботи якщо введено 1:

тернарный оператор ?:

если 0:

тернарный оператор ?:

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

Рассмотрим строку 20. Код будет выполняться так – вначале отработает тернарный оператор, вернет значение исходя из поставленного условия, а после это значение запишется в переменную max. якщо умова (firstDigit > secondDigit) – істина, значение firstDigit записується в max , если ложь, то записывается значение secondDigit. Далі має бути все зрозуміло. Компилируем:

тернарный оператор ?:

Программа работает отлично!

Немного о тернарном операторе рассказано в этом видео-уроке (15-я минута). Помимо этого, в ньому розглядаються так само оператор множинного вибору switch (17-я минута) і умовні оператори if і else




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

Хотите сказать “спасибо” автору? – поделитесь статьей со своими друзьями. Для цього натисніть на кнопку вашої соціальної мережі під цією статтею. Мне будет приятно! :)

Нові уроки з програмування:

5 думки про "Тернарний оператор ? : в C++

  1. ІМХО варто додати, що не всі угоди про кодування взагалі дозволяють використовувати тернарний оператор, т.к. часто падає простота сприйняття коду.

    Ось так:

    точно краще не робити.
    1) У тебе variable – змінна типу bool, тому variable == 1 варто замінити на variable.
    2) Ти порівнюєш булева змінна з цілим числом, це може заплутати інших програмістів.
    3) За деякими угодами про кодування при порівнянні на рівність константний вираз має бути в лівій частині (щоб не вийшло написати variable = 1 замість змінної == 1, т.к. 1 = Variable видасть помилку на етапі компіляції).
    4) я б записав так:

    Ряд товаришів порадили б замість variable написати true == variable, але тут можна сперечатися :).

    Вобщем весь код такої. Я б це:

    замінив так (приблизно):

    тут немає сенсу виконувати порівняння 2 рази і немає сенсу брати умова в дужки

    З останнього прикладу видно, що двокрапкою поділяється не одна команда і інша команда (як на твоєму малюнку), а вираження. До того ж я б згадав, що оператор кома теж повертає значення.

    1. rrrFer (він же Володимир), це чудово, що ти так ретельно вичитуєш наші статті. Що можна сказати по твоєму коментарю? скажу так – удосконалювати і оптимізувати код можна до нескінченності. Завдяки твоєму коментарю читачі побачать, що одну і ту ж задачу можна вирішити різними способами і що є різні варіанти поводження з булевксімі змінними. У твоєму випадку код більш оптимізований. А мій код розписаний більш детально (так ми орієнтуємося в першу чергу на новачків) і точно так же, як і твій код, має право на життя.
      P.S. Лайки з твого коментаря видалені і надалі їх бачити не хотілося б

      1. еммм… в моєму коментарі були лайки? )

        Я не вичитував статті взагалі, я подивився малюнок і вихідний код.

        Справа тут не в оптимізації, а в потенційних одвірках, які ніколи не з'являться якщо слідувати деяким угодам.

        Ну наприклад, коли ти порівнюєш булева змінна з цілим числом, що відбувається? – відбувається приведення типу bool до типу int, при цьому в стандарті закріплено, що true відповідає одиниці, а помилкова – нулю. Але якби ціле число кастовать в bool, те 2 == True мало б повернути true (але це не так, хоча всякі студенти і школярі можуть сумніватися, адже вони не читали стандарт).

        Про угоди я писав до того, що є підводні камені. Наприклад одного разу ти напишеш свій клас комплексних чисел і перенавантажуватимеш для нього оператор порівняння і оператор приведення типу до bool. Я вважаю, що можна отримати різний і небезпечну поведінку в цьому випадку. Тобто,. правильніше порівнювати змінні одного типу, а не сподіватися на те що воно автоматично скастуется.

        Я вважаю, що акцент треба зробити на випадках, коли тернарний оператор треба застосовувати, т.е. коли він буде корисний. Без нього взагалі можна обійтися, але він є синтаксичним цукром, яким часто зловживають школярі і студенти. пишуть ось так приблизно:

        У нас до угоді про кодування були перераховані випадки коли ЗАБОРОНЕНО використовувати цей оператор щоб не допустити ось такий код.

      2. Ми повністю згодні з тим, що без цього тернарного оператора можна обійтися в програмуванні. Але треба знати, що такий існує, як він виглядає і як працює. Ніколи не знаєш, який чужий код тобі доведеться читати і що там буде використано.

  2. У прикладі з if else значення max і min приймають 0, поясніть будь ласка в чому помилка?

залишити коментар

Код розміщуйте в тегах: <pre class="lang:C ++ декодуванням:true ">ВАШ КОД</заздалегідь>