삼항 또는 삼항? [닫은]


186

나는 개인적으로 삼항 연산자의 옹호자입니다 : ()? :; 나는 그것이 그 자리를 차지하고 있다는 것을 알고 있지만, 그것을 사용하는 것에 완전히 반대하는 많은 프로그래머와 너무 자주 사용하는 일부 프로그래머를 만났습니다.

그것에 대한 당신의 감정은 무엇입니까? 어떤 흥미로운 코드를 사용해 보셨습니까?


22
무언가를 옹호하는 사람은 그 일을지지하는 사람입니다.
Doug McClean

8
명확 할 때 사용하고 혼동 될 때는 사용하지 마십시오. 그것은 심판의 전화입니다. 코드를 더 읽기 쉽게 만들 수 있지만 간단한 표현식에만 사용할 수 있습니다. 하려고 항상 사용하는 것은 단지만큼 그것을 피하는 끊임없이 같은 위협이다.
Abel

3
실제로 조건부 연산자입니다. 중복 질문은 stackoverflow.com/questions/725973/… 입니다.
Daniel Daranas

나는 때때로 사용하고 x = x if x else y있지만 그것에 대해 물었고 다른 사람들과 함께 x = x 또는 y로 줄이는 것을 알게되었습니다 ( stackoverflow.com/questions/18199381/self-referencing-ternary/… )
Scruffy

4
이와 같은 질문이 건설적인 것으로 간주되어서는 안됩니다.
Ungeheuer

답변:


243

간단한 표현식에만 사용하십시오 .

int a = (b > 10) ? c : d;

삼항 연산자를 읽고 혼동하기 어렵 기 때문에 연결하거나 중첩하지 마십시오 .

int a = b > 10 ? c < 20 ? 50 : 80 : e == 2 ? 4 : 8;

또한 삼항 연산자를 사용할 때는 가독성을 향상시키는 방식으로 코드를 형식화하십시오.

int a = (b > 10) ? some_value                 
                 : another_value;

81
처음 몇 가지 진술에 전적으로 동의하지만 "가독성 향상"에 대한 귀하의 예에는 전적으로 동의하지 않습니다. 여러 줄로 갈 경우 if 문을 사용하지 않는 이유는 무엇입니까?
Joe Phillips

3
단순한 결정을 위해 다른 것이 더 자세한 정보 인 경우 : int a = 0; if (b> 10) a = some_value; 그렇지 않으면 a = another_value; 당신은 무엇을 선호합니까?
marcospereira

44
@ d03boy : if-statement는 그저 진술 일 뿐이므로, 원하는 것이 모두 표현이면하지 않을 것입니다.
falstro

2
@roe 일부 언어에서는 표현 (예 : 스칼라 등) 인 val x = if(true) 0 else 1경우 완벽하게 합법적입니다
om-nom-nom

5
예를 들어 @ om-nom-nom은 if 문이 아닌 if- 표현식이되며 본질적으로? :-연산자와 동일합니다.
falstro

141

각 하위 표현식에 중단 점을 배치 할 수 없으므로 디버깅이 약간 더 어렵습니다. 나는 거의 사용하지 않습니다.


44
그것은 내가 들어 본 삼항 연산자에 대한 가장 좋은 주장입니다. 나는 "읽을 수없는"논증을 사지 않는다 (사람들에게 익숙해지기에는 너무 게으른 것처럼 들린다). 그러나 이것은 실제로 물질을 가지고있다.
EpsilonVector 1

80

나는 특히 타입 안전 언어로 그들을 좋아합니다.

나는 이것이 어떻게 보이지 않는다 :

int count = (condition) ? 1 : 0;

이보다 더 어렵다 :

int count;

if (condition)
{
  count = 1;
} 
else
{
  count = 0;
}

편집하다 -

삼항 연산자는 대안보다 모든 것을 덜 복잡하고 깔끔하게 만든다고 주장합니다.


5
변수가 상수 일 때 D 또는 C ++에서 3 차 초기화가 더 유용합니다. 예 const int count = ...;
deft_code

글쎄, 당신은 if/else불필요한 괄호 로 잘못 표현 하고 있습니다.
bobobobo

1
또한이 경우 conditionbool 당신할 수 있다면int count = condition;
bobobobo

1
@bobobobo if/else중괄호와 함께 이것은 대부분의 프로그래머가 삼항을 다시 쓰는 방법입니다.
Andre Figueiredo

1
@bobobobo 중괄호가없는 경우 문제를 묻는 것입니다. 누군가가 선을 추가하는 것은 너무 쉽지만, 블록의 일부로 추가 선을 실행하기 위해 중괄호가 필요하다는 것을 잊지 마십시오 : stackoverflow.com/a/381274/377225
George Marian

43

묶여 나는 괜찮습니다.

나는 C에서 더 많이 사용하는 경향이 있습니다. b / c는 가치가있는 if 문이므로 불필요한 반복이나 변수를 줄입니다.

x = (y < 100) ? "dog" :
    (y < 150) ? "cat" :
    (y < 300) ? "bar" : "baz";

오히려

     if (y < 100) { x = "dog"; } 
else if (y < 150) { x = "cat"; }
else if (y < 300) { x = "bar"; } 
else              { x = "baz"; }

이와 같은 과제에서 리팩터링하는 것이 적고 명확합니다.

반면에 루비로 작업 할 때는 if...else...end표현이기 때문에 사용할 가능성이 더 큽니다 .

x =   if (y < 100) then "dog"
    elif (y < 150) then "cat"
    elif (y < 300) then "bar"
    else                "baz"
    end

(물론,이 간단한 것에 대해서는 어쨌든 삼항 연산자를 사용할 수 있습니다).


2
나는 당신의 첫 번째 예를 좋아합니다. 전에는 그렇게 묶을 생각은 없었습니다. 공유해 주셔서 감사합니다. =)
Erik Forbes

5
+1 최근에 그 일을 시작했습니다. 실제로 스위치 문을 대체하기 위해 수행합니다.
Davy8

1
@rampion의 훌륭한 예입니다.
ylluminate

39

삼항 ?:연산자는 단지 절차 적 if구성 과 기능적으로 동등합니다 . 중첩 ?:표현식을 사용하지 않는 한 조작의 기능적 표현에 대한 인수가 여기에 적용됩니다. 그러나 삼항 연산을 중첩하면 코드가 완전히 혼란 스러울 수 있습니다 (독자 운동 : 중첩 삼항 조건을 처리하는 파서를 작성하면 복잡성을 이해할 수 있습니다).

그러나 ?:연산자를 보수적으로 사용하면 실제로 는 다른 것보다 읽기 쉬운 코드가 생길 수 있는 상황이 많이 있습니다 . 예를 들면 다음과 같습니다.

int compareTo(Object object) {
    if((isLessThan(object) && reverseOrder) || (isGreaterThan(object) && !reverseOrder)) {
       return 1;
    if((isLessThan(object) && !reverseOrder) || (isGreaterThan(object) && reverseOrder)) {
       return -1;
    else
      return 0;              
}

이제 이것을 이것과 비교하십시오 :

int compareTo(Object object) {
    if(isLessThan(object))
        return reverseOrder ? 1 : -1;         
    else(isGreaterThan(object))
        return reverseOrder ? -1 : 1;
    else        
       return 0;              
}

코드가 더 콤팩트하기 때문에 구문 노이즈가 적고 삼항 연산자를 신중하게 사용하면 ( reverseOrder 속성 에만 관련됨 ) 최종 결과는 특히 간결하지 않습니다.


나는 여전히 삼항이 아닌 모든 if / then / else 구성에서 찬사를 사용하여 옹호하므로 두 번째 예제에는 몇 가지 imho가 누락되었습니다.
Kris

예, 기능적입니다. 부울 인수가 하나 인 작은 함수와 같으며 원하는 모든 유형을 반환 합니다 ! 실제로 깔끔한 연산자입니다.
bobobobo

24

스타일의 문제입니다. 내가 따르는 경향이있는 잠재 의식 규칙은 다음과 같습니다.

  • 만 1 표현식을 평가 - 그래서 foo = (bar > baz) ? true : false,하지만foo = (bar > baz && lotto && someArray.Contains(someValue)) ? true : false
  • 디스플레이 로직에 사용하는 경우 (예 : <%= (foo) ? "Yes" : "No" %>
  • 실제로 할당에만 사용하십시오. 절대 흐름 논리 (그래서 절대 (foo) ? FooIsTrue(foo) : FooIsALie(foo)) 삼항의 흐름 논리는 거짓말 자체입니다. 마지막 지점을 무시하십시오.

나는 간단한 할당 작업을 위해 간결하고 우아하기 때문에 좋아합니다.


좋은 지침과 좋은 예!
nickf

나는 대부분의 언어가 당신이 그것을 흐름 논리에 사용하도록 허용하지 않을 것이라고 생각하므로 (foo)? True (foo) : False (foo); 과제가 아니라면
Henry B

네, 맞아요, 내 나쁜
Keith Williams

21
두 가지 첫 번째 예는 정말 나쁩니다. 비교 결과는 이미 부울 값이므로 삼항 연산자는 쓸모가 없으며 코드를 복잡하게 만듭니다.
트릴리언

1
@Trillian +1 예, 다른 과제를 수행해야합니다. foo = (bar > baz);훨씬 간단합니다
Eric

18

많은 의견을 질문처럼 대답은 필연적이다 : 그것은 의존한다

같은 :

return x ? "Yes" : "No";

나는 그것이 다음 보다 훨씬 간결 하다고 생각합니다 (그리고 구문 분석하기가 더 빠릅니다).

if (x) {
    return "Yes";
} else {
    return "No";
}

이제 조건식이 복잡한 경우 삼항 연산은 적합하지 않습니다. 다음과 같은 것 :

x && y && z >= 10 && s.Length == 0 || !foo

삼항 연산자에 적합하지 않습니다.

또한 C 프로그래머라면 GCC에는 실제로 다음과 같이 삼항의 실제 부분을 제외 할 수 있는 확장자 가 있습니다.

/* 'y' is a char * */
const char *x = y ? : "Not set";

설정합니다 어떤 xy가정은 y하지 않습니다 NULL. 좋은 물건.


약간의 구문과 문법 문제, Sean :-) 코드의 마지막 비트에서 y가 누락되고 "x를 y에 할당"은 "y = x"를 의미하므로 "x를 y에 설정"으로 설정합니다.
paxdiablo

@Pax : 감사합니다! GCC 확장을 사용하면 삼항의 실제 부분이 필요하지 않다는 것을 지적하려고 시도한 이후 구문 변경을 롤백했습니다.
Sean Bright

죄송합니다. 해당 단락을 보지 못했습니다. 사람들이 ISO 표준 컴파일러로 컴파일하지 않는 코드를 작성할 수 있기 때문에 그런 종류의 것들에 동의한다는 것을 모릅니다. GCC는 마지막 사람이 서있을 때 여전히, 그 :-) 중요하지 않습니다
paxdiablo

그것은 확실히 부두이다. 그리고 누가 GCC를 사용하지 않는가? : D
Sean Bright

14

제 생각에는 표현이 필요한 경우에만 삼항 연산자를 사용하는 것이 좋습니다.

다른 경우에는 삼항 연산자가 선명도를 낮추는 것처럼 보입니다.


문제는 언어의 99 %이며, 표현식은 함수로 대체 될 수 있습니다 ... 삼항 연산자를 피하는 ppl은 그 솔루션을 선호합니다.
PierreBdR

11

순환 복잡도 의 측정에 의해, if문장 의 사용 또는 삼항 연산자는 동일합니다. 따라서이 측정법으로 대답은 ' 아니요' 이며 복잡성은 이전과 정확히 동일합니다.

가독성, 유지 보수성 및 DRY (반복하지 않음)와 같은 다른 방법으로 두 가지 선택이 다른 것보다 더 나을 수 있습니다.


10

선택적 매개 변수가 null 일 때 기본값을 정의하기 위해 생성자에서 작동하도록 제한 된 곳 (예 : 새로운 .NET 3.5 LINQ to XML 구문)에서 자주 사용합니다.

고안된 예 :

var e = new XElement("Something",
    param == null ? new XElement("Value", "Default")
                  : new XElement("Value", param.ToString())
);

또는 (고마워 아 스테 라이트)

var e = new XElement("Something",
    new XElement("Value",
        param == null ? "Default"
                      : param.ToString()
    )
);

삼항 연산자를 사용하는지 여부에 관계없이 코드를 읽을 수 있는지 확인하는 것이 중요합니다. 모든 구문을 읽을 수 없게 만들 수 있습니다.


또는 ... var e = new XElement ( "Something", new XElement ( "value", param == null? "Default": param.toString ()));
asterite

2
가독성을 위해 형식을 지정하고 있기 때문에 많은 사람들이 그렇지 않습니다.
bruceatk

사람이 읽을 수 없다면 사람이 읽을 수있는 소스 코드는 무엇입니까? =)
Erik Forbes

9

코드를 읽기가 매우 어려워지지 않는 한 삼항 연산자를 사용할 수 있습니다. 그러나 일반적으로 코드가 약간의 리팩토링을 사용할 수 있음을 나타냅니다.

그것은 어떤 사람들이 삼항 연산자가 "숨겨진"기능이거나 다소 신비하다고 생각하는 방식을 항상 당혹스럽게합니다. C로 프로그래밍을 시작할 때 처음 배운 것 중 하나이며, 가독성을 전혀 떨어 뜨리지 않는다고 생각합니다. 언어의 자연스러운 부분입니다.


1
나는 완전히 동의합니다. 그것에 대해 숨겨 지거나 까다로운 것은 없습니다.
mmattax

2
특히 중첩 된 경우 가독성 문제가 발생할 수 있습니다.
David Thornley

나는 " 읽기가 매우 어렵다"는 것은 너무 관대 하다고 생각 하지만 전반적으로 나는 당신에게 동의합니다. 그것에 대해 어렵거나 신비로운 것은 없습니다.
EpsilonVector 1

7

나는 jmulder에 동의합니다 :. 대신 사용해서는 안되지만 if반환 표현식 또는 표현식 내부에 위치해야합니다.

echo "Result: " + n + " meter" + (n != 1 ? "s" : "");
return a == null ? "null" : a;

전자는 단지 예일 뿐이며, 복수의 더 나은 i18n 지원을 사용해야합니다!


첫 번째 삼항이 잘못되었습니다. 가야한다 : (n! = 1 ? "s": "")
Erik Forbes

예, 지적 해 주셔서 감사합니다! 결정된.
PhiLho

7

(오늘의 해킹)

#define IF(x) x ?
#define ELSE :

그런 다음 if-then-else를 표현식으로 수행 할 수 있습니다.

int b = IF(condition1)    res1
        ELSE IF(condition2)  res2
        ELSE IF(conditions3) res3
        ELSE res4;

이 질문에 대답하지 않습니다
브루노 알렉상드르 로사

6

간단한 조건부 할당에 삼항 연산자를 사용하는 경우 괜찮습니다. 나는 그것을 할당하지 않고도 프로그램 흐름을 제어하는 ​​데 사용되는 것을 보았으므로 피해야한다고 생각합니다. 이 경우 if 문을 사용하십시오.


5

필요할 때 삼항 연산자를 사용해야한다고 생각합니다. 분명히 매우 주관적인 선택이지만 간단한 식 (특히 반환 식)이 전체 테스트보다 훨씬 명확하다는 것을 알았습니다. C / C ++의 예 :

return (a>0)?a:0;

다음과 비교 :

if(a>0) return a;
else return 0;

솔루션이 삼항 연산자와 함수 작성 사이에있는 경우도 있습니다. 예를 들어 파이썬에서 :

l = [ i if i > 0 else 0 for i in lst ]

대안은 다음과 같습니다.

def cap(value):
    if value > 0:
        return value
    return 0
l = [ cap(i) for i in lst ]

파이썬에서 (예를 들어) 그러한 관용구가 정기적으로 보일 수 있어야합니다.

l = [ ((i>0 and [i]) or [0])[0] for i in lst ]

이 줄은 파이썬에서 논리 연산자의 속성을 사용합니다. 게으르고 최종 상태와 같으면 계산 된 마지막 값을 반환합니다.


3
그 마지막 줄은 내 뇌를 아프게한다.
Erik Forbes

5

나는 그들을 좋아한다. 이유를 모르지만 삼항식을 사용할 때 매우 시원합니다.


5

나는 같은 짐승을 보았다.

isLeapYear =
    ((yyyy % 400) == 0)
    ? 1
    : ((yyyy % 100) == 0)
        ? 0
        : ((yyyy % 4) == 0)
            ? 1
            : 0;

분명히 일련의 if 문이 더 좋을 것입니다 (이것은 내가 한 번 보았던 매크로 버전보다 여전히 낫습니다).

나는 다음과 같은 작은 것들에 대해서는 신경 쓰지 않는다.

reportedAge = (isFemale && (Age >= 21)) ? 21 + (Age - 21) / 3 : Age;

또는 약간 까다로운 것들 :

printf ("Deleted %d file%s\n", n, (n == 1) ? "" : "s");

일련의 분리 if 문이 더 읽기 쉽다고 어떻게 말할 수 있습니까? 나는 당신의 "짐승" 을 잘 읽었습니다 . reportedAge알아내는 것보다 특별한 경우가 많기 때문에 약간의 수치를 취하는 예입니다.isThisYearALeapYear
Axeman

4

글쎄, 그 구문은 끔찍합니다. 기능적 ifs가 매우 유용하며 코드를 더 읽기 쉽게 만듭니다.

매크로를 더 읽기 쉽도록 만드는 것이 좋지만 CPP에는 항상있는 것처럼 누군가가 끔찍한 경우를 생각해 낼 수 있다고 확신합니다.


많은 BASIC 구현 및 변형에는 삼항 연산자를 대신하는 IF 함수가 있습니다. C에서 매크로로 정의 된 코드베이스를 많이 보았습니다.
Sparr

글쎄, 함수형 프로그래밍 언어를 생각하고 있었지만 그렇습니다.
Marcin

"매크로를 읽기 쉽게 만들기 위해", 당신은 꽤 농담입니다!
niXar

4

디버그 코드에서 연산자를 사용하여 오류 값을 인쇄하는 것을 좋아하므로 항상 찾을 필요가 없습니다. 일반적으로 개발이 완료된 후에도 유지되지 않는 디버그 인쇄에 대해이 작업을 수행합니다.

int result = do_something();
if( result != 0 )
{
  debug_printf("Error while doing something, code %x (%s)\n", result,
                result == 7 ? "ERROR_YES" :
                result == 8 ? "ERROR_NO" :
                result == 9 ? "ERROR_FILE_NOT_FOUND" :
                "Unknown");
}


4

나는 삼항 연산자를 거의 사용하지 않습니다. 왜냐하면 그것을 사용할 때마다 나중에 유지하려고 할 때 항상 생각보다 많이 생각하기 때문입니다.

나는 자세한 정보를 피하고 싶지만 코드를 더 쉽게 찾을 수있게되면 자세한 정보를 얻을 것이다.

치다:

String name = firstName;

if (middleName != null) {
    name += " " + middleName;
}

name += " " + lastName;

자, 그것은 조금 장황하지만, 나는 그것을보다 더 읽기 쉽습니다.

String name = firstName + (middleName == null ? "" : " " + middleName)
    + " " + lastName;

또는:

String name = firstName;
name += (middleName == null ? "" : " " + middleName);
name += " " + lastName;

무슨 일이 일어나고 있는지 명확하게하지 않고 너무 많은 정보를 너무 작은 공간으로 압축하는 것 같습니다. 삼항 연산자가 사용되는 것을 볼 때마다 나는 항상 훨씬 더 읽기 쉬운 대안을 찾았습니다. 다시 한번, 그것은 매우 주관적인 의견이므로, 당신과 동료들이 삼진을 매우 읽기 쉽게 찾으면 그것을 찾으십시오.


1
그래도 정확히 같은 것은 아닙니다. 두 번째 예에서는 세 문장을 모두 한 줄로 압축합니다. 이것이 삼항 연산자가 아니라 가독성을 떨어 뜨리는 것입니다.
ilitirit

충분히 공정하고, 귀하의 의견을 반영하기 위해 업데이트되었지만 여전히 혼란 스럽습니다 ...하지만 다시 주관적입니다 ... 삼항은 읽을 수 없다고 말하지 않습니다. 나에게 읽을 수 없다고 말하고 있습니다 (99 시간의 %)
Mike Stone


3

나는 일반적으로 다음과 같은 것들을 사용합니다 :

before:

if(isheader)
    drawtext(x,y,WHITE,string);
else
    drawtext(x,y,BLUE,string);

after:

    drawtext(x,y,isheader==true?WHITE:BLUE,string);

물론 대부분의 언어에서는 해당 삼항의 "== true"부분이 필요하지 않습니다.
Michael Haren

내가 컴파일러와 같은 일을 최적화해야하기 때문에 어쨌든 == 진정한없이 코드를 더 읽기 쉽게하기 위해 단지에 넣어하는 경향이 있지만 나는 그 실현
KPexEA

어떤 언어 당신은 아마도 "== true"로해야 할 수 있습니다
niXar

공감 여부를 결정하는 데 어려움을 겪었습니다. 예제는 훌륭하지만 == TRUE는 다른 사람들의 코드에서 볼 수없는 것입니다.
Peter Perháč

3

다른 사람들이 지적했듯이 짧은 간단한 조건에 좋습니다. 나는 특히 기본값 ( javascript 및 python에서 의 ||/ 또는 사용법 과 같은 종류)을 좋아합니다.

int repCount = pRepCountIn ? *pRepCountIn : defaultRepCount;

또 다른 일반적인 용도는 C ++에서 참조를 초기화하는 것입니다. 동일한 명령문에서 참조를 선언하고 초기화해야하므로 if 문을 사용할 수 없습니다.

SomeType& ref = pInput ? *pInput : somethingElse;

2
이것이 ":"대신 "if"를 사용할 수없는 몇 안되는 장소 중 하나 인 초기화 참조에 대한 첫 번째 언급이라는 것이 놀랍습니다. (이것은 C ++ 관련 질문이 아니기 때문에 ...) 동일한 이유로 생성자 초기화 목록에도 유용합니다.
j_random_hacker

2

나는 삼항 연산자를 GOTO처럼 많이 취급합니다. 그것들은 자신의 자리를 가지고 있지만 일반적으로 코드를 이해하기 쉽도록 피해야합니다.


2

나는 최근에 표준 "()? :"변형을 명확하게 보여주는 파라곤으로 만드는 삼항 연산자 (잘, 일종)에 대한 변형을 보았습니다.

var Result = [CaseIfFalse, CaseIfTrue][(boolean expression)]

또는 더 확실한 예를 들자면 :

var Name = ['Jane', 'John'][Gender == 'm'];

이것은 자바 스크립트이므로 다른 언어에서는 (고맙게도) 그런 것이 불가능할 수도 있습니다.


1
와우, 끔찍하다! 둘을 함께 중첩시키는 것을 상상해보십시오! 내가 볼 수있는 유일한 모호한 점은 2 요소 배열을 리턴하는 함수가있는 경우입니다. var Name = getNames () [Gender == 'm']; ...하지만 읽기가 쉽지 않습니다!
nickf

2

간단한 경우에는 사용하고 싶습니다. 실제로 함수 또는 이와 유사한 것들의 매개 변수로 예를 들어 읽고 코딩하는 것이 훨씬 쉽습니다. 또한 새로운 줄을 피하기 위해 모든 if / else를 유지하고 싶습니다.

Neseting 내 책에 큰 NO-NO가 될 것입니다.

다시 시작하면 단일 if / else에 대해 삼항 연산자를 사용합니다. 다른 경우에는 일반적인 if / else if / else (또는 스위치)


2

나는 Elvis 연산자라고 불리는 Groovy의 삼항 연산자의 특별한 경우를 좋아한다.

expr ?: default

이 코드는 null이 아닌 경우 expr로 평가하고 기본값 인 경우 기본값으로 평가합니다. 기술적으로 실제로 삼항 연산자는 아니지만 분명히 관련이 있으며 많은 시간 / 입력을 절약합니다.


그래, 나도 그 점을 좋아한다-그것은 ??널 합체 연산자 인 C #에있다 : stackoverflow.com/questions/278703/…
Jarrod Dixon

2

조건에 따라 다른 값을 할당하는 것과 같은 간단한 작업의 경우 유용합니다. 조건 tho에 따라 더 긴 표현이있을 때는 사용하지 않을 것입니다.


2

너무 많은 답변에 따르면, 그것은 달려 있습니다. 코드를 빠른 스캔으로 삼항 비교가 보이지 않으면 사용해서는 안됩니다.

부수적 인 문제로, C에서 비교 테스트가 진술이라는 사실로 인해 그 존재 자체가 실제로는 약간의 혐오감을 알 수 있습니다. Icon에서, if대부분의 Icon과 같은 구문은 실제로 표현식입니다. 따라서 다음과 같은 작업을 수행 할 수 있습니다.

x[if y > 5 then 5 else y] := "Y" 

... 나는 ternery 비교 연산자보다 훨씬 더 읽기 쉽습니다. :-)

최근 ?:아이콘에 연산자를 추가 할 가능성에 대한 토론이 있었지만 몇몇 사람들은 if작동 방식 때문에 절대적으로 필요가 없다고 올바르게 지적했습니다 .

즉, C (또는 ternery 연산자가있는 다른 언어)에서 그렇게 할 수 있다면 실제로 ternery 연산자가 전혀 필요하지 않습니다.


2

당신과 당신의 동료들이 그들이하는 일을 이해하고 그들이 대규모 그룹으로 만들어지지 않았다면 나는 코드가 적기 때문에 코드가 덜 복잡하고 읽기 쉽습니다.

삼항 연산자가 코드를 이해하기 어렵게 만드는 유일한 시간은 한 줄에 3 개 또는 4 개가 넘는 경우입니다. 대부분의 사람들은 자신이 올바른 우선 순위라는 것을 기억하지 못하고 스택이 있으면 코드를 읽는 것이 악몽이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.