2016-07-05 6 views
-1

3 진 연산자를 과도하게 사용하고, 때로는 매우 간단한 if 문으로 대체합니다. 이와Java의 삼항 연산자를 사용하면 변수를 자체에 할당한다는 의미는 무엇입니까?

if (foo != null) { 
    bar = foo; 
} 

: 예를 들어, 난 그냥 내 자신이 같은 것을 대체 발견

bar = (foo == null) ? bar : foo; 

가 하나 더 좋은 읽는 취향의 문제이지만, 궁금 :

  • 이 경우 3 진 버전의 성능이 저하됩니까?
  • 여기에 3 종 사용에 대한 다른 이유가 있습니까?

여기 악화 될 수있는 성능을 보라 이유는 내가 컴파일러가 foonull 때의 원을 최적화 할 수없는 가정이다. 따라서 bar의 값이 다시 동일한 값으로 설정되어 일부 CPU 시간이 낭비 될 수 있습니다.이 경우 간단한 if 문이 그 지점에 도달하지 않습니다. 그러나 컴파일러와 실행에 대한 나의 지식은 제한되어 있으므로 의문이 남는다. 당신은 스타일에 대해 걱정 한 경우

+1

특정 조건에서 'bar = bar'로 '붕괴'되는 개념은 나에게 이상합니다. 이전의 (if 문으로) 더 장황하지만 훨씬 더 읽기 쉽고 명확합니다. 내 $ 0.02 – Taylor

+1

당신은 이미 당신의 질문에 대답했습니다. 그것은 "오버 헤드"이며 삼항 연산자의 사용법이 적당하지 않습니다. – Andrew

+0

다른 변수에'i = i'를 대입하는 것과 다른 점은 무엇입니까? –

답변

3

, 당신은 적어도 브래킷 노이즈 제거해야합니다 : 성능에 관해서는

bar = foo == null ? bar : foo; 

을, 당신은 foo가 null 인 경우에 불필요한 할당을 가지고있다. 큰 거래. 당신은 나노초에 대해서 말하고 있습니다.

"성능"의이 중요한 차이에 대해 걱정하지 마십시오. 가독성에 대한 걱정은 더 중요합니다. 이 경우

, 나는 if 버전은 더 읽기 찾기 :

if (foo != null) { 
    bar = foo; 
} 

그것은 코드의 의도가 무엇인지 매우 분명하다.

+0

그것에 대해 생각해 보면, 여기에 3 진을 사용하게 된 한 가지 이유는'foo == null '보다'foo == null'을 선호한다는 것입니다. 또한 대부분의 경우 성능 차이가 중요하지 않음에 동의합니다. 그럼에도 불구하고 확실하게 알고 싶었습니다. 내가 동의하지 않는 것은 괄호가없는 3 진수입니다. 괄호로 읽는 것이 더 쉬운 방법입니다. 그러나 그것은 물론 맛과 습관의 문제입니다. 그건 그렇고, 나는 그것이 읽기 쉽다는 것에 동의하면서 (그리고 3 진수가 몇 나노초를 추가 할 것이라는 것을 안심시켜 주었다) 나의 코드를'if' 버전으로 바꾸었다. – domsson

+1

@domdom에 대해'foo == null' 대'foo! = null'에 관해서는 * negative 테스트 (같지 않음, 크지 않음 등)보다 항상 * 양수 * 테스트 (즉, 같음, 큰 것 등) 가능하다면 우리의 작은 두뇌가 읽고 이해하기가 더 쉽기 때문입니다. – Bohemian