짧은 IF-ELSE 문


82

내 코드를 더 읽기 쉽게 만들려고해서 짧은 IF 문을 사용하기로 결정했습니다.

다음은 작동하지 않는 코드입니다 ( "문이 아닙니다").

jXPanel6.isVisible() ? jXPanel6.setVisible(true) : jXPanel6.setVisible(false);

이것에 무슨 문제가 있습니까? 대괄호가 필요하십니까? 어디?


2
마우 테토가 이것을 더 잘 쓰는 방법을 제공했지만,이 구조는 일반적으로 삼항 연산자라고합니다. (혹시 궁금해;))
리스 무어에게

그것은의 조건 연산자. "Ternary"는 3 개의 피연산자가 있음을 의미합니다.

조건부 연산자에 대한 언어 사양 링크 : docs.oracle.com/javase/specs/jls/se10/html/…

답변:


214

"삼항 표현식" x ? y : z은 조건부 할당 에만 사용할 수 있습니다 . 즉, 다음과 같이 할 수 있습니다.

String mood = inProfit() ? "happy" : "sad";

삼항 표현식이 ( String이 예 에서는 유형의) 무언가를 반환하기 때문 입니다.

실제로 짧은 인라인으로 사용되는 것은 아닙니다 if-else. 특히 개별 부품이 값을 반환하지 않거나 호환되지 않는 유형의 값을 반환하는 경우 사용할 수 없습니다. (따라서 두 메서드가 동일한 값을 반환하는 경우이 작업을 수행 할 수 있지만 부작용 목적으로 만 호출 해서는 안됩니다 .)

따라서이를 수행하는 적절한 방법은 if-else 블록을 사용하는 것입니다.

if (jXPanel6.isVisible()) {
    jXPanel6.setVisible(true);
}
else {
    jXPanel6.setVisible(false);
}

물론 단축 할 수 있습니다

jXPanel6.setVisible(jXPanel6.isVisible());

후자의 표현은 모두 당신이하려는 일을 더 명확하게 전달한다는 점에서 더 읽기 쉽습니다. (그런데, 조건이 잘못 되었나요? 이건 토글 이라기보다는 노-옵인 것 같습니다).

낮은 문자 수가독성혼동 하지 마십시오 . 요점은 가장 쉽게 이해할 수있는 것입니다. 그리고 약간의 언어 기능을 오용하는 것은 독자를 혼란스럽게하거나 적어도 정신적 인 이중 작업을하게 만드는 확실한 방법입니다.


1
할당에 조건부 연산자 만 사용할 수 있다는 것은 사실이 아닙니다. 표현식이 필요한 모든 곳에서 사용할 수 있습니다.

28
jXPanel6.setVisible(jXPanel6.isVisible());

또는 귀하의 양식 :

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);

14
FWIW, 정확히 .NET과 동일하기 때문에 쓸 필요가 없다고 생각합니다 . <bool condition> ? true : false<bool condition>
Andrzej Doyle

2
명백하게! 그러나 monczek은 Short If-Else 문에 대해 물었으므로 구문을 보여주기 위해 코딩했습니다.
mauretto 2013-04-05

4

삼항 연산자는 할당의 오른쪽 만 될 수 있으며 자체 문이 될 수 없습니다.

http://www.devdaily.com/java/edu/pj/pj010018/


조건부 연산자가 할당의 RHS에서만 사용할 수 있다는 것은 사실이 아닙니다. 표현식을 사용할 수있는 모든 곳에서 사용할 수 있습니다.


2

나는 파티에 조금 늦었지만 미래의 독자들을 위해.

내가 알 수 있듯이 가시성 상태를 바로 전환하고 싶습니까? !연산자를 사용하지 않는 이유는 무엇 입니까?

jxPanel6.setVisible(!jxPanel6.isVisible);

if 문은 아니지만 예제와 관련된 코드에이 방법을 선호합니다.


또한 상태를 전환하려는 경우 진술이 역순이라고 생각합니다. 이것이 작동하지 않은 이유입니까? jXPanel6.isVisible ()이어야합니까? jXPanel6.setVisible (false) : jXPanel6.setVisible (true);
Andy Body

토글 문이 아니라면 이미 그렇게 설정된 것을 보이게하는 목적을 이해하지 못합니다. isVisible은 상태를 검색하고 setVisible은 상태를 설정합니다. isVisible 문이 true를 반환하는 경우 다시 true로 설정해야합니다. 내가 뭔가를 놓치고 있습니까?
Andy Body

1

이처럼 간단하게 할 수 있습니다.

 (myNumber == 12) ? "true" : "false"

아래의 함수가 다음과 같았습니다.

if (myNumber == 12) {
  "true"
} else {
  "false"
}

^ _ ^ 도움이되기를 바랍니다

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