[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.오른쪽 측면에 관계없이 (예를 들어, 로깅)을 실행하려는 부작용과 함수 인 경우 그들은 유용하다. 그러나, 나는 그 코드 냄새가 조금 있다고 제안 확실히 다음 사람에게 직관적 될 것입니다.
오른쪽 측면에 관계없이 (예를 들어, 로깅)을 실행하려는 부작용과 함수 인 경우 그들은 유용하다. 그러나, 나는 그 코드 냄새가 조금 있다고 제안 확실히 다음 사람에게 직관적 될 것입니다.
-
==============================
2.흠. 나는 그들이 신중하게 사용 된 경우 C / C ++ 코드를 최적화하는 데 매우 유용 할 수 있습니다 알고 있습니다. 그것은 잘 자바에 적용 할 수 있습니다.
흠. 나는 그들이 신중하게 사용 된 경우 C / C ++ 코드를 최적화하는 데 매우 유용 할 수 있습니다 알고 있습니다. 그것은 잘 자바에 적용 할 수 있습니다.
C의 주요 사용 - 실제 비트 연산 이외의 - 파이프 라인 스톨을 제거하는 것입니다. 짧은 회로 사업자는 분기 작업을 필요로한다. 비트 단위 연산자는 양쪽을 계산하고 예측 된 지점과 그 결과 스톨의 기회를 제거합니다.
-
==============================
3.비 단락 부울 연산자를 사용하여 피연산자 부작용을 가지고 있음을 의미한다. 그들은 더 부작용이 없었다 경우, 프로그래머는 기능의 변화없이 단락 버전을 사용하고 있습니다.
비 단락 부울 연산자를 사용하여 피연산자 부작용을 가지고 있음을 의미한다. 그들은 더 부작용이 없었다 경우, 프로그래머는 기능의 변화없이 단락 버전을 사용하고 있습니다.
(스칼라는 반드시 권장하지만, 필요하지 않습니다) 기능 스타일로 작성된 코드에서 부작용은 드문 일이 벌어지고 있다는 표시입니다. 비정상적인 상황이 명확하지 않고 비 단락 회로 부울 연산자로 미묘한 같은 무언가보다는, 코드에 표시되어야한다.
-
==============================
4.당신이 뭔가에 대한 답변 또는 입력을 추적하기 위해 노력하고있다, 그것은 당신의 비 단락 부울 실행의 양쪽에 의존합니다.
당신이 뭔가에 대한 답변 또는 입력을 추적하기 위해 노력하고있다, 그것은 당신의 비 단락 부울 실행의 양쪽에 의존합니다.
예를 들어, 당신은 말한다 :
if(methodA() & methodB()){ //some code }
그리고 methodB () 메소드 내에서 몇 가지 중요한 코드가 실행 중입니다. 그는이 단락 코드 (&&) 및 methodA () methodB, 거짓 인 경우 () 실행되지 않을 것입니다.
즉 적어도 내가 생각할 수있는 용도 중 하나입니다.
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
'SCALA' 카테고리의 다른 글
[SCALA] 같은 발견하고 필요한 데이터 유형과 스파크에서 : "오류 형식이 일치하지 않습니다" (0) | 2019.11.24 |
---|---|
[SCALA] 스칼라 mapValues 게으른인가? (0) | 2019.11.24 |
[SCALA] 왜 asInstanceOf ClassCastException를 슬로우하지 않는 이유는 무엇입니까? (0) | 2019.11.24 |
[SCALA] 스칼라에서 변수 이름으로 "형"단어를 사용하는 방법이 있나요? (0) | 2019.11.24 |
[SCALA] SBT 0.13.11 프록시 뒤에 종속성을 다운로드 할 수 없습니다 (0) | 2019.11.24 |