2013-04-24 3 views
0

나는 다음을 수행 싶습니다 :조건부 연산자 : 얼마나 유연성이 있습니까?

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 ? ... ; 

이것은 형식이 잘못 되었습니까?

조건부 연산자로 둘 이상의 레벨을 중첩하지 않습니다.

내가 사용하려는 표현은 매우 간결하고 간단하여 조건부 연산자를 만드는 것으로, 제 생각에는 사용 가치가 있습니다.

P. 나는 A를 묻지 않을 것이다. 나는 어느 것을 사용해야합니까? B. 어느 것이 더 낫다. C. 어느 것이 더 적절 한가?

P. if-else 문을 삼항 조건부 연산자로 변환하는 방법을 묻습니다.

코딩 표준 등에 관한이 질문에 대한 조언은 단순히 바람직하지 않습니다.

+5

이것은 주로 스타일 문제입니다 (경우에 따라 구문이 너무 길어질 수도 있음). 나는 첫 번째 대안이 일반적으로 훨씬 더 읽기 쉽다고 말하고 싶다. –

+2

'if (a) b else c;'는 명령문입니다. '? b : c'는 표현식입니다. 의미있는 것을 골라라. –

+0

나는이 woks를 생각하지 않는다. .. 나를 위해 오류를 던진다. ... –

답변

3

부울을 참 및 거짓으로 비교하지 마십시오. 그들이 진실이거나 거짓이기 때문에 아무런 요지가 없습니다! 그냥 당신이 {}을 사용하기 때문에

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*/ 등이다에 의존 않습니다 수 있습니다.

+0

좋은 점과 부울에 관해서 감사합니다.하지만 그것은 의미있는 예를 만들려고했기 때문에 설명을 목적으로 한 것입니다. 이제 해결책을 찾아 보겠습니다. – Mushy

1

쉼표 연산자를 사용하여 서로 다른 표현식을 함께 쓰는 것은 언어 규칙 내에 있지만 코드를 읽기가 어렵게 만듭니다 (쉼표를 찾아야하기 때문에 항상 쉽지는 않습니다. 특히 표현식이 ' t 정말 간단.

다른 요인은 만 if (x) ... else if(y) ... 형 조건문 상태에 대해이 작업을 수행 할 수 물론이다. 때때로

, 사람들이 "읽을 수있는 코드"에서 "짧은 코드"를 선호하는 것 같다,의 인 물론 "가장 적은 수의 줄에 글을 쓸 수있는"경쟁자라면 다른 모든 것, 특히 "공개"중이거나 동료와 공유해야하는 코드는 유익합니다. 그것을 이해하십시오 - 일단 소프트웨어 프로젝트가 충분히 커지면, 코드가 어떻게 읽혀 지는지 이해하기가 어려워 져서 코드를 읽기가 더 어렵게 만듭니다. 두 번째 예제에서 설명한 방법으로 조건문을 사용할 때 어떤 이점도 실제로 볼 수 없습니다. 이 예는 좋지 않을 수도 있지만 일반적으로 "하지 마라"라고 말하고 싶습니다.

+0

내가 사용하는 표현은 매우 간결하고 매우 단순하다는 점에 유의해야합니다. – Mushy

+1

실제 코드의 REAL 샘플을 보여줍니다 (코드에 대한 주석은 너무 작습니다). –

0

물론 (C++ 11에서) 작동합니다. 나는 해결책을 시도했지만 다음하지 않은 Herb Sutters way 당신이 에테르에게 함수 호출 즉시 실행되는 람다 사용할 수 있습니다 : 여기 컴파일하려고하지만,하지 않은

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

당신은으로 계산 중 whih 결과가를 람다 또는 정상적인 기능.