Java ?: 연산자 란 무엇이며 어떤 역할을합니까?
나는 2 년 동안 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 인수) 연산자이기 때문에 많은 사람들이 이것을 잘못 삼항 연산자 라고 부릅니다 . 그러나 이론적으로있을 수있는 단 하나의있을 수있는 반면, 또 다른 삼항 연산자가 될 조건 연산자 .
공식 명칭은 Java 언어 사양에 나와 있습니다 .
§15.25 조건부 연산자? :
조건부 연산자
? :
는 한 표현식의 부울 값을 사용하여 두 개의 다른 표현식 중 어떤 것을 평가할지 결정합니다.
두 가지 모두 반환 값이있는 메소드로 연결되어야합니다.
두 번째 또는 세 번째 피연산자 표현식이 void 메소드를 호출하는 것은 컴파일 타임 오류입니다.
실제로, 표현 문의 문법 ( §14.8 )에 의해, void 메소드의 호출이 나타날 수있는 어떤 상황에서도 조건식이 나타나는 것은 허용되지 않습니다.
따라서 void 메소드 인 경우 doSomething()
이를 doSomethingElse()
압축 할 수 없습니다.
if (someBool)
doSomething();
else
doSomethingElse();
이것으로 :
someBool ? doSomething() : doSomethingElse();
간단한 단어 :
booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse
다른 사람들은 이것을 합리적인 정도로 대답했지만 종종 "삼항 연산자"라는 이름으로 대답했습니다.
나는 pedant이기 때문에 연산자의 이름이 조건부 연산자 또는 "조건부 연산자? :"임을 분명히하고 싶습니다. 그것은이다 삼항 연산자 (이 세 개의 피연산자를 가지고있는 것을) 순간에 자바에있는 유일한 삼항 연산자로 발생합니다.
그러나 스펙은 그 이름이 조건부 연산자 또는 "조건부 연산자? :"라는 것이 분명합니다. 피연산자가 몇 개가 아닌 연산자의 동작을 어느 정도 (조건 평가) 나타내는 것으로 표시되므로 그 이름으로 호출하는 것이 더 명확하다고 생각합니다.
Sun Java Specification 에 따르면이를 조건부 연산자라고합니다. 섹션 15.25를 참조하십시오. 당신은 그것이 무엇을하는 것이 옳습니다.
조건부 연산자? : 한 표현식의 부울 값을 사용하여 두 개의 다른 표현식 중 어느 것을 평가할지 결정합니다.
조건부 연산자는 구문 상 오른쪽 연관 (오른쪽에서 왼쪽으로 그룹화)이므로 a? b : c? d : e? f : g는 a? b : (c? d : (e? f :지)).
ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression
조건부 연산자에는 세 가지 피연산자 표현식이 있습니다. ? 첫 번째 식과 두 번째 식 사이에가 나타나고 :가 두 번째 식과 세 번째 식 사이에 나타납니다.
첫 번째 표현식은 부울 또는 부울 유형이어야합니다. 그렇지 않으면 컴파일 타임 오류가 발생합니다.
정확하게 정확하지 않은 :
- isHere가 true 인 경우 getHereCount () 의 결과 가 리턴됩니다.
- otheriwse getAwayCount () 의 결과 가 반환됩니다
"반환"은 매우 중요합니다. 즉, 메소드 가 값을 리턴 해야 하며 해당 값을 어딘가에 지정 해야합니다 .
또한 구문 적으로 if-else 버전과 동일 하지 않습니다 . 예를 들면 다음과 같습니다.
String str1,str2,str3,str4;
boolean check;
//...
return str1 + (check ? str2 : str3) + str4;
if-else로 코딩하면 항상 더 많은 바이트 코드가 생성됩니다.
int count = isHere ? getHereCount(index) : getAwayCount(index);
의미 :
if (isHere) {
count = getHereCount(index);
} else {
count = getAwayCount(index);
}
condition ? truth : false;
조건이 있으면 true
첫 번째 매개 변수를 리턴하십시오. 조건이 false
인 경우 두 번째 매개 변수를 리턴하십시오.
이를 조건부 연산자 라고 하며 유형은 삼항 연산 입니다.
Ternary, conditional; tomato, tomatoh. What it's really valuable for is variable initialization. If (like me) you're fond of initializing variables where they are defined, the conditional ternary operator (for it is both) permits you to do that in cases where there is conditionality about its value. Particularly notable in final fields, but useful elsewhere, too.
e.g.:
public class Foo {
final double value;
public Foo(boolean positive, double value) {
this.value = positive ? value : -value;
}
}
Without that operator - by whatever name - you would have to make the field non-final or write a function simply to initialize it. Actually, that's not right - it can still be initialized using if/else, at least in Java. But I find this cleaner.
This construct is called Ternary Operator in Computer Science and Programing techniques.
And Wikipedia suggest the following explanation:
In computer science, a ternary operator (sometimes incorrectly called a tertiary operator) is an operator that takes three arguments. The arguments and result can be of different types. Many programming languages that use C-like syntax feature a ternary operator, ?: , which defines a conditional expression.
Not only in Java, this syntax is available within PHP, Objective-C too.
In the following link it gives the following explanation, which is quiet good to understand it:
A ternary operator is some operation operating on 3 inputs. It's a shortcut for an if-else statement, and is also known as a conditional operator.
In Perl/PHP it works as:
boolean_condition ? true_value : false_value
In C/C++ it works as:
logical expression ? action for true : action for false
This might be readable for some logical conditions which are not too complex otherwise it is better to use If-Else block with intended combination of conditional logic.
We can simplify the If-Else blocks with this Ternary operator for one code statement line.
For Example:
if ( car.isStarted() ) {
car.goForward();
} else {
car.startTheEngine();
}
Might be equal to the following:
( car.isStarted() ) ? car.goForward() : car.startTheEngine();
So if we refer to your statement:
int count = isHere ? getHereCount(index) : getAwayCount(index);
It is actually the 100% equivalent of the following If-Else block:
int count;
if (isHere) {
count = getHereCount(index);
} else {
count = getAwayCount(index);
}
That's it!
Hope this was helpful to somebody!
Cheers!
Correct. It's called the ternary operator. Some also call it the conditional operator.
Its Ternary Operator(?:)
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.
You might be interested in a proposal for some new operators that are similar to the conditional operator. The null-safe operators will enable code like this:
String s = mayBeNull?.toString() ?: "null";
It would be especially convenient where auto-unboxing takes place.
Integer ival = ...; // may be null
int i = ival ?: -1; // no NPE from unboxing
It has been selected for further consideration under JDK 7's "Project Coin."
Actually it can take more than 3 arguments. For instance if we want to check wether a number is positive, negative or zero we can do this:
String m= num > 0 ? "is a POSITIVE NUMBER.": num < 0 ?"is a NEGATIVE NUMBER." :"IT's ZERO.";
which is better than using if, else if, else.
It's the conditional operator, and it's more than just a concise way of writing if statements.
Since it is an expression that returns a value it can be used as part of other expressions.
Yes, you are correct. ?: is typically called the "ternary conditional operator", often referred to as simply "ternary operator". It is a shorthand version of the standard if/else conditional.
I happen to really like this operator, but the reader should be taken into consideration.
You always have to balance code compactness with the time spent reading it, and in that it has some pretty severe flaws.
First of all, there is the Original Asker's case. He just spent an hour posting about it and reading the responses. How longer would it have taken the author to write every ?: as an if/then throughout the course of his entire life. Not an hour to be sure.
Secondly, in C-like languages, you get in the habit of simply knowing that conditionals are the first thing in the line. I noticed this when I was using Ruby and came across lines like:
callMethodWhatever(Long + Expression + with + syntax) if conditional
If I was a long time Ruby user I probably wouldn't have had a problem with this line, but coming from C, when you see "callMethodWhatever" as the first thing in the line, you expect it to be executed. The ?: is less cryptic, but still unusual enough as to throw a reader off.
The advantage, however, is a really cool feeling in your tummy when you can write a 3-line if statement in the space of 1 of the lines. Can't deny that :) But honestly, not necessarily more readable by 90% of the people out there simply because of its' rarity.
When it is truly an assignment based on a Boolean and values I don't have a problem with it, but it can easily be abused.
Conditional expressions are in a completely different style, with no explicit if in the statement.
The syntax is: boolean-expression ? expression1 : expression2;
The result of this conditional expression is
expression1 if boolean-expression is true;
otherwise the result is expression2.
Suppose you want to assign the larger number of variable num1 and num2 to max. You can simply write a statement using the conditional expression: max = (num1 > num2) ? num1 : num2;
Note: The symbols ? and : appear together in a conditional expression. They form a conditional operator and also called a ternary operator because it uses three operands. It is the only ternary operator in Java.
cited from: Intro to Java Programming 10th edition by Y. Daniel Liang page 126 - 127
참고URL : https://stackoverflow.com/questions/798545/what-is-the-java-operator-called-and-what-does-it-do
'Programing' 카테고리의 다른 글
오류 ITMS-90717 :“잘못된 앱 스토어 아이콘” (0) | 2020.06.18 |
---|---|
파이썬에서 사전을 한 줄씩 인쇄하는 방법? (0) | 2020.06.18 |
오류 : 서비스가 유효하지 않습니다 (0) | 2020.06.17 |
UILabel-텍스트에 맞게 자동 크기 레이블? (0) | 2020.06.17 |
SQL Server 사용자 정의 함수에서 오류를보고하는 방법 (0) | 2020.06.17 |