2013-02-27 3 views
4

у меня есть программный поток следующим образом:троичный оператор с несколькими операторами

if(a) 
{ 
    if((a > b) || (a > c)) 
    { 
     doSomething(); 
    } 
    statementX; 
    statementY; 
} 

Мне нужно, чтобы перевести это в условное выражение, и это то, что я сделал:

(a) ? (((a > b) || (a > c)) ? doSomething() : something_else) : something_else; 

Где Я вставляю инструкции statementX, statementY? Поскольку это необходимо выполнить в обоих возможных случаях, я не могу найти способ.

+11

Почему? Мне кажется более читаемым в его первой форме! .. – Joe

+0

У вас '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 's' – us2012

+0

Несмотря на то, что я настроен на кропотливую природу тернарного оператора, я редко использую его, как сказал Джо, он улучшает читаемость. – ppeterka

ответ

11

Вы можете использовать запятую , оператор так:

a ? (
    (a > b || a > c ? do_something : do_something_else), 
    statementX, 
    statementY 
) 
    : something_else; 

Следующая программа:

#include <stdio.h> 

int main() 
{ 
    int a, b, c; 

    a = 1, b = 0, c = 0; 

    a ? (
     (a > b || a > c ? printf ("foo\n") : printf ("bar\n")), 
     printf ("x\n"), 
     printf ("y\n") 
    ) 
    : printf ("foobar\n"); 
} 

печати для меня:

foo 
x 
y 
+0

Это сработало хорошо. Любой источник, чтобы получить больше этого? – user2053912

+3

@ user2053912 http://en.wikipedia.org/wiki/Comma_operator –

+0

Спасибо за ссылку. – user2053912

2

Учитывая, что вы выполняете заявления и не назначаете, я придерживаюсь условия if(). Это также, возможно, более читаемо для всех, кто может столкнуться с этим фрагментом кода.

что-то однострочное может показаться приятным, но с точки зрения потери удобочитаемости это не стоит (увеличение производительности не происходит).

3

Вы можете использовать вложенные Тернарные заявления оператора

if(a) 
{ 
if((a > b) || (a > c)) 
{ 
    printf("\nDo something\n"); 
} 
printf("\nstatement X goes here\n"); 
printf("\nstatement X goes here\n"); 
} 

Приведенный выше код может быть заменен

(a) ? ( (a>b || a>c)? printf("\nDo something\n"); : printf("\nstatement X goes here\n");printf("\nstatement Y goes here\n"); ) : exit (0); 

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

+0

Простой, но точный. Благодарю. – user2053912

Смежные вопросы