Условный оператор: сколько гибкости?

Я хотел бы выполнить следующее:

if(x == true)
{
// do this on behalf of x
// do this on behalf of x
// do this on behalf of x
}

Используя условный оператор, это правильно?

x == true ? { /*do a*/, /*do b*/, /*do c*/ } : y == true ? ... ;

Это неправильно сформировано?

Я не вкладываю более одного уровня с условным оператором.

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

Постскриптум Я не спрашиваю А. Что мне следует использовать? B. что лучше C. что лучше

Постскриптум Я спрашиваю, как преобразовать оператор if-else в троичный условный оператор.

Любые советы по этому вопросу относительно стандартов кодирования и т. Д. Просто нежелательны.

0

Решение

Не сравнивайте логическое значение с истинным и ложным. Нет никакого смысла, потому что они уже правда или ложь! Просто пиши

if (x)
{
// do this on behalf of x
// do this on behalf of x
// do this on behalf of x
}

Ваш второй пример не компилируется, потому что вы используете { а также }, Но это может

x ? ( /*do a*/, /*do b*/, /*do c*/ ) : y ? ... ;

но это зависит от того, что /*do a*/ и т. д.

3

Другие решения

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

Другой фактор, конечно, что вы можете сделать это только для if (x) ... else if(y) ... Тип условного состояния.

Иногда кажется, что люди предпочитают «короткий код» из «читаемого кода», что, конечно, замечательно, если вы участвуете в конкурсе «кто может написать это в наименьшем количестве строк», но для всего остального, особенно кода, который «включен». показать «или поделиться с коллегами, которые также должны это понять — как только программный проект становится достаточно большим, обычно становится трудно понять, как работает код БЕЗ запутывания, которое затрудняет чтение кода. Я не вижу никакой пользы в использовании условных операторов в том, как описан ваш второй пример. Вполне возможно, что пример плохой, но в целом я бы сказал «не делай этого».

1

Конечно, это работает (с C ++ 11). Я не пробовал решение, но после Херб Саттерс путь Вы можете использовать ether для вызова функции или лямбды, которые выполняются немедленно:

cond ?
[&]{
int i = some_default_value;
if(someConditionIstrue)
{
Do some operations ancalculate the value of i;
i = some calculated value;
}
return i;
} ()
:
somefun() ;

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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector