Запутанные операторы условий

Я работаю над проектом по созданию розетки с таймером, используя Arduino и датчик тока. Для кода я решил изменить код, который должен был быть кухонным таймером.

В этом коде я нашел оператор

currentMode = currentMode == MODE_IDLE ? MODE_RUNNING : MODE_IDLE;

Я предположил, что это работает таким образом, что он выбирает, находится ли таймер в текущем режиме или в режиме ожидания, но я не понимаю механизма, стоящего за этим. Что означает это утверждение?

, 👍0

Обсуждение

это if (currentMode == MODE_IDLE) {currentMode = MODE_RUNNING;} else {currentMode = MODE_IDLE;}, @Juraj

http://www.tutorialspoint.com/ansi_c/ternary_operator_examples.htm, @Juraj

Я думаю, что добавление скобок делает его более читабельным: currentMode = (currentMode == MODE_IDLE)? MODE_RUNNING : MODE_IDLE;, @Filip Franik


1 ответ


Лучший ответ:

1

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

если вы не понимаете тернарные операторы, это можно переписать так:

if (currentMode == MODE_IDLE) {
  currentMode = MODE_RUNNING;
} else {
  currentMode = MODE_IDLE;
}

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

В общих чертах тернарный оператор имеет следующую форму (используется в присваивании):

result = (booleanExpression) ? (value if true) : (value if false);

но вы можете использовать его и в других контекстах, например, в вызове функции:

someFn(booleanExpression ? trueValue : falseValue);
,

Интернету нужно еще одно объяснение тернарного оператора?, @Juraj