복붙노트

[SCALA] 비 단락 자바 / 스칼라 논리 (부울) 연산자를위한이 좋은 용도는?

SCALA

비 단락 자바 / 스칼라 논리 (부울) 연산자를위한이 좋은 용도는?

그리고 ^ | 최근 자바 (그리고 스칼라)이 아닌 짧은 단락 논리 연산자 &를 포함 것을 발견했다. 나는 이전에이은 비트 연산자로 일했다 생각했다. 어쩌면 ^에 대한 논쟁이 있지만, 나는 논리 연산자를 단락이 아닌 짧은-사용을 위해 아주 좋은 이유를 생각할 수 없다 - 물론, 내가 예를 고안 할 수 있지만.

이러한 연산자 유용하다? 그들은 어려운 캐치 버그를 일으킬 가능성이 보인다.

scala> def foo = {
     |   println("foo")
     |   true
     | }
foo: Boolean

scala> def bar = {
     |   println("bar")
     |   true
     | }
bar: Boolean

scala> foo || bar
foo
res5: Boolean = true

scala> foo | bar
foo
bar
res6: Boolean = true

해결법

  1. ==============================

    1.오른쪽 측면에 관계없이 (예를 들어, 로깅)을 실행하려는 부작용과 함수 인 경우 그들은 유용하다. 그러나, 나는 그 코드 냄새가 조금 있다고 제안 확실히 다음 사람에게 직관적 될 것입니다.

    오른쪽 측면에 관계없이 (예를 들어, 로깅)을 실행하려는 부작용과 함수 인 경우 그들은 유용하다. 그러나, 나는 그 코드 냄새가 조금 있다고 제안 확실히 다음 사람에게 직관적 될 것입니다.

  2. ==============================

    2.흠. 나는 그들이 신중하게 사용 된 경우 C / C ++ 코드를 최적화하는 데 매우 유용 할 수 있습니다 알고 있습니다. 그것은 잘 자바에 적용 할 수 있습니다.

    흠. 나는 그들이 신중하게 사용 된 경우 C / C ++ 코드를 최적화하는 데 매우 유용 할 수 있습니다 알고 있습니다. 그것은 잘 자바에 적용 할 수 있습니다.

    C의 주요 사용 - 실제 비트 연산 이외의 - 파이프 라인 스톨을 제거하는 것입니다. 짧은 회로 사업자는 분기 작업을 필요로한다. 비트 단위 연산자는 양쪽을 계산하고 예측 된 지점과 그 결과 스톨의 기회를 제거합니다.

  3. ==============================

    3.비 단락 부울 연산자를 사용하여 피연산자 부작용을 가지고 있음을 의미한다. 그들은 더 부작용이 없었다 경우, 프로그래머는 기능의 변화없이 단락 버전을 사용하고 있습니다.

    비 단락 부울 연산자를 사용하여 피연산자 부작용을 가지고 있음을 의미한다. 그들은 더 부작용이 없었다 경우, 프로그래머는 기능의 변화없이 단락 버전을 사용하고 있습니다.

    (스칼라는 반드시 권장하지만, 필요하지 않습니다) 기능 스타일로 작성된 코드에서 부작용은 드문 일이 벌어지고 있다는 표시입니다. 비정상적인 상황이 명확하지 않고 비 단락 회로 부울 연산자로 미묘한 같은 무언가보다는, 코드에 표시되어야한다.

  4. ==============================

    4.당신이 뭔가에 대한 답변 또는 입력을 추적하기 위해 노력하고있다, 그것은 당신의 비 단락 부울 실행의 양쪽에 의존합니다.

    당신이 뭔가에 대한 답변 또는 입력을 추적하기 위해 노력하고있다, 그것은 당신의 비 단락 부울 실행의 양쪽에 의존합니다.

    예를 들어, 당신은 말한다 :

    if(methodA() & methodB()){
        //some code
    }
    

    그리고 methodB () 메소드 내에서 몇 가지 중요한 코드가 실행 중입니다. 그는이 단락 코드 (&&) 및 methodA () methodB, 거짓 인 경우 () 실행되지 않을 것입니다.

    즉 적어도 내가 생각할 수있는 용도 중 하나입니다.

  5. from https://stackoverflow.com/questions/9540718/are-there-good-uses-for-non-short-circuiting-logical-boolean-operators-in-java by cc-by-sa and MIT license