programing

Java ?: 연산자는 무엇이며 어떤 역할을 합니까?

prostudy 2022. 8. 8. 14:59
반응형

Java ?: 연산자는 무엇이며 어떤 역할을 합니까?

저는 Java와 몇 년 동안 일해 왔지만, 최근까지 이 구조를 접한 적은 없습니다.

int count = isHere ? getHereCount(index) : getAwayCount(index);

이것은 아마 매우 간단한 질문일 것입니다만, 누군가 설명해 주실 수 있습니까?어떻게 읽어요?나는 그것이 어떻게 돌아가는지 알고 있다고 꽤 확신한다.

  • isHere 말이다.getHereCount()라고 합니다.
  • isHeregetAwayCount()출됩니니다다

맞습니까?이 구조를 뭐라고 합니까?

네, 줄임말입니다.

int count;
if (isHere)
    count = getHereCount(index);
else
    count = getAwayCount(index);

조건부 연산자라고 합니다.Java, C, C++, 그리고 아마도 다른 많은 언어에서 유일한 3진수 연산자이기 때문에 많은 사람들은 (오류적으로) 이것을 3진수 연산자라고 부릅니다.그러나 이론적으로 다른 삼원 연산자가 있을 수 있지만, 조건부 연산자는 하나만 있을 수 있습니다.

공식 이름은 Java Language Specification에 기재되어 있습니다.

§ 15.25 조건부 연산자? :

연산자 " " " "? :는 1개의 식 부울값을 사용하여 다른 2개의 식 중 어느 것을 평가할지를 결정합니다.

두 브랜치 모두 반환값을 갖는 메서드로 이어져야 합니다.

두 번째 또는 세 번째 피연산자 식 중 하나가 void 메서드의 호출이 되는 것은 컴파일 시 오류입니다.

사실 표현문의 문법(1414.8)에 따르면 조건식이 보이드 메서드의 호출이 나타날 수 있는 문맥에서 나타나는 것은 허용되지 않는다.

만약에 '만약에'가doSomething() ★★★★★★★★★★★★★★★★★」doSomethingElse()할 수 .

if (someBool)
    doSomething();
else
    doSomethingElse();

다음과 같이 입력합니다.

someBool ? doSomething() : doSomethingElse();

간단한 단어:

booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse 

다른 사람들은 이 질문에 합리적인 범위까지 대답했지만, 종종 "3진 연산자"라는 이름으로 대답합니다.

저는 pedant이기 때문에 연산자의 이름이 조건부 연산자 또는 "conditional operator ?:"라는 것을 명확히 하고 싶습니다.이것은 3차 연산자이며, 현재 Java에서 유일한 3차 연산자입니다.

, 그 이름이 조건부 연산자 또는 "conditional operator ?"인 것은 매우 명확합니다.오퍼랜드의 수보다 오퍼레이터의 동작(조건의 평가)을 어느 정도 나타내므로, 그 이름으로 부르는 것이 더 명확하다고 생각합니다.

Sun Java 사양에 따르면 조건부 연산자라고 합니다.섹션 15.25를 참조하십시오.그게 뭘 하는지는 당신이 옳아요.

조건부 연산자 ? :는 한 식의 부울 값을 사용하여 다른 두 식 중 어떤 식을 평가할지 결정합니다.

조건부 연산자는 구문적으로 오른쪽에서 왼쪽으로 그룹화되므로 a?b:c?d:e?f:g는 a?b:(c?d:(e?f:g)와 같은 의미입니다.

ConditionalExpression:
        ConditionalOrExpression
        ConditionalOrExpression ? Expression : ConditionalExpression

조건부 연산자에는 3개의 오퍼랜드 식이 있습니다.첫 번째 식과 두 번째 식 사이에 ?가 표시되고 두 번째 식과 세 번째 식 사이에 :가 표시됩니다.

첫 번째 식은 부울 또는 부울 유형이어야 합니다. 그렇지 않으면 컴파일 시간 오류가 발생합니다.

condition ? truth : false;

조건이 다음과 같으면true그런 다음 첫 번째 식을 평가합니다.조건이 다음과 같으면false두 번째 식을 평가합니다.

이것은 조건부 연산자로 불리며 3차 연산의 한 종류입니다.

int count = isHere ? getHereCount(index) : getAwayCount(index);

의미:

if (isHere) {
    count = getHereCount(index);
} else {
    count = getAwayCount(index);
}

정확히는 정확하지 않습니다.

  1. isHere true일 경우 getHereCount() 결과반환됩니다.
  2. 기타 getAwayCount()의 결과가 반환되는 경우

그 '반환'은 매우 중요하다., 메서드는 값을 반환하고 값을 어딘가에 할당해야 합니다.

또한 if-else 버전과 구문적으로 동일하지 않습니다.예를 들어 다음과 같습니다.

String str1,str2,str3,str4;
boolean check;
//...
return str1 + (check ? str2 : str3) + str4;

if-else로 코딩하면 항상 바이트 코드가 증가합니다.

삼진법, 조건법, 토마토, 토마토.이 기능은 가변 초기화에 매우 유용합니다.(나처럼) 변수가 정의되어 있는 곳에서 초기화하는 것을 좋아하는 경우, 조건부 3진 연산자(둘 다 해당)를 사용하면 변수에 대한 조건성이 있는 경우에도 초기화할 수 있습니다.최종 분야에서는 특히 주목받지만 다른 분야에서도 유용합니다.

예:

public class Foo {
    final double    value;

    public Foo(boolean positive, double value) {
        this.value = positive ? value : -value;
    }
}

이 연산자가 없으면(이름에 관계없이) 필드를 최종값이 아닌 것으로 만들거나 단순히 초기화하기 위한 함수를 작성해야 합니다.사실 그렇지 않습니다. 적어도 Java에서는 if/else를 사용하여 초기화할 수 있습니다.하지만 난 이 청소기를 찾았어.

조건부 연산자와 유사한 일부 새 연산자에 대한 제안에 관심이 있을 수 있습니다.null-safe 연산자는 다음과 같은 코드를 활성화합니다.

String s = mayBeNull?.toString() ?: "null";

자동 언박스가 이루어지는 곳은 특히 편리할 것이다.

Integer ival = ...;  // may be null
int i = ival ?: -1;  // no NPE from unboxing

JDK 7의 「프로젝트 코인」아래에서, 한층 더 검토 대상으로 선정되었습니다.

이 구성은 컴퓨터 과학 및 프로그래밍 기술에서 삼항 연산자라고 불립니다.
그리고 위키피디아는 다음과 같은 설명을 제안합니다.

컴퓨터 과학에서, 3차 연산자(때로는 3차 연산자로 잘못 불리기도 함)는 세 개의 인수를 취하는 연산자입니다.인수와 결과는 다른 유형일 수 있습니다.C와 같은 구문을 사용하는 많은 프로그래밍 언어에는 조건식을 정의하는 3진 연산자 ?:가 있습니다.

Java뿐 아니라 PHP, Objective-C에서도 이 구문을 사용할 수 있습니다.

다음 링크에서는 다음과 같은 설명을 제공합니다.이 설명은 이해하기 쉽습니다.

3진수 연산자는 3개의 입력에 대해 작동하는 일부 연산자입니다.if-else 문의 바로 가기이며 조건부 연산자로도 알려져 있습니다.

Perl/PHP에서는 다음과 같이 동작합니다.
boolean_condition ? true_value : false_value

C/C++ 에서는, 다음과 같이 동작합니다.
logical expression ? action for true : action for false

이는 너무 복잡하지 않은 일부 논리 조건에서는 읽을 수 있습니다.그렇지 않으면 조건 논리 조합과 함께 If-Else 블록을 사용하는 것이 좋습니다.

이 Ternary 연산자를 사용하여 If-Else 블록을 하나의 코드 문 행으로 단순화할 수 있습니다.
§:

if ( car.isStarted() ) {
     car.goForward();
} else {
     car.startTheEngine();
}

다음과 같을 수 있습니다.

( car.isStarted() ) ? car.goForward() : car.startTheEngine();

그래서 우리가 당신의 진술을 참조한다면,

int count = isHere ? getHereCount(index) : getAwayCount(index);

실제로는 다음 If-Else 블록과 100% 동등합니다.

int count;
if (isHere) {
    count = getHereCount(index);
} else {
    count = getAwayCount(index);
}

★★★★★★★★★★★★★★★★!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★!
건!!

맞아요.삼원 연산자라고 합니다.어떤 이들은 그것을 조건부 연산자라고 부르기도 합니다.

3진 연산자(?)입니다.:)

The ternary operator is an operator that takes three arguments. The first 
argument is a comparison argument, the second is the result upon a true 
comparison, and the third is the result upon a false comparison.

실제로는 3개 이상의 인수가 필요할 수 있습니다.예를 들어, 값이 양수, 음수 또는 0인지 확인하려면 다음과 같이 하십시오.

String m= num > 0 ? "is a POSITIVE NUMBER.": num < 0 ?"is a NEGATIVE NUMBER." :"IT's ZERO.";

if, if, if, other를 사용하는 것보다 낫습니다.

조건 연산자이고, 단순한 if 문장의 간결한 작성 방법 그 이상입니다.

값을 반환하는 표현식이므로 다른 표현식의 일부로 사용할 수 있습니다.

네, 맞습니다. ?:는 일반적으로 "3진수 조건부 연산자"로 불리며, 흔히 단순히 "3진수 연산자"라고 합니다.이것은 표준 if/else 조건의 약어 버전입니다.

삼항 조건부 연산자

저는 이 연산자를 매우 좋아하지만, 독자분들도 고려해야 합니다.

코드 콤팩트함과 읽는 데 소비하는 시간의 균형을 항상 맞춰야 합니다.그 점에서, 코드 콤팩트함에는 꽤 심각한 결함이 있습니다.

우선, 오리지널 아스카의 케이스가 있습니다.그는 그것에 대해 글을 올리고 반응을 읽는데 한 시간을 보냈다.작가가 모든 것을 쓰는 데 얼마나 더 오래 걸렸을까? 즉, 그의 인생 전반에 걸쳐서 하나의 가정과 같은 것으로 쓰였을까?확실히는 1시간도 안돼.

둘째, C형 언어에서는 단순히 조건이 첫 번째라는 것을 아는 습관을 들인다.저는 Ruby를 사용하다가 다음과 같은 대사를 발견하게 되었습니다.

callMethodWhatever(Long + Expression + with + syntax) if conditional

제가 루비 유저라면 이 회선에 문제가 없었을 것입니다만, C에서 첫 번째로 「MethodWhat」라고 하는 것을 보면, 실행이 기대됩니다.?:는 덜 난해하지만 여전히 독자를 놀라게 할 정도로 특이하다.

단, 1줄의 공간에 if 스테이트먼트를 3줄 쓸 수 있는 것은 뱃속이 매우 시원해지는 것이 장점입니다.부정할 수 없다:) 하지만, 솔직히 말해서, 단지 희귀하다는 이유만으로, 90%의 사람들이 더 읽기 쉽다고는 할 수 없다.

진정한 부울값과 가치관을 바탕으로 한 과제라면 문제없지만 악용되기 쉽습니다.

조건식은 문장에 명시적인 경우 없이 완전히 다른 스타일입니다.

구문은 boolean-expression ? expression1 : expression2 입니다.

이 조건식의 결과는

expression1(부울식이 참일 경우)

그렇지 않으면 expression2가 됩니다.

변수 num1과 num2의 수를 max에 할당하는 경우를 가정합니다.max = (num1 > num2) ? num1 : num2 ; 라는 조건식을 사용하여 간단히 스테이트먼트를 쓸 수 있습니다.

주의: 기호는 조건식으로 함께 표시됩니다.이들은 조건 연산자를 형성하고 3개의 오퍼랜드를 사용하기 때문에 3진 연산자라고 불리기도 합니다.Java에서 유일한 3진 연산자입니다.

인용처:Java Programming 제10판 Y의 소개.다니엘 량 126~127페이지

?: Ternary Java 연산자입니다.

구문은 다음과 같습니다.

condition ? expression1 : expression2;

여기, 그condition평가 및

  • condition돌아온다true,그expression1가 실행됩니다.

  • condition돌아온다false,그expression2가 실행됩니다.

    공개 클래스 Sonycode { public static void main ( String [ ]args }{ 더블 마크 = 90 }}?[ marks > 40 ] ?「 pass in test 」:"pass in exam"; System.out.println("당신의 결과는 " + result"); } }

출력:-

 Your result is :  passed in exam

언급URL : https://stackoverflow.com/questions/798545/what-is-the-java-operator-called-and-what-does-it-do

반응형