Java ?: 연산자는 무엇이며 어떤 역할을 합니까?
저는 Java와 몇 년 동안 일해 왔지만, 최근까지 이 구조를 접한 적은 없습니다.
int count = isHere ? getHereCount(index) : getAwayCount(index);
이것은 아마 매우 간단한 질문일 것입니다만, 누군가 설명해 주실 수 있습니까?어떻게 읽어요?나는 그것이 어떻게 돌아가는지 알고 있다고 꽤 확신한다.
isHere
말이다.getHereCount()
라고 합니다.isHere
getAwayCount()
출됩니니다다
맞습니까?이 구조를 뭐라고 합니까?
네, 줄임말입니다.
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);
}
정확히는 정확하지 않습니다.
- isHere true일 경우 getHereCount() 결과가 반환됩니다.
- 기타 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
'programing' 카테고리의 다른 글
미포획 방법(약속)TypeError: orders.For는 함수가 아닙니다.VueJS 2 (0) | 2022.08.08 |
---|---|
v-model에서 변경 이벤트가 두 번 발생함 (0) | 2022.08.08 |
C의 바이너리 파일을 읽고 쓰시겠습니까? (0) | 2022.08.08 |
Vuetify의 확장 가능한 데이터 테이블에서 상자 그림자 제거 (0) | 2022.08.08 |
서버 이름 표시(SNI) 구현 방법 (0) | 2022.08.08 |