루비에서`not`과`!`의 차이점


답변:


143

거의 동의어이지만 정답은 아닙니다. 다른 점이다 !보다 높은 우선 순위가 not더 원한다면, &&그리고 ||보다 높은 우선 순위로되어 and하고 or.

!모든 연산자의 우선 순위가 가장 높고 가장 not낮은 연산자 중 하나 는 Ruby 문서에서 전체 테이블을 찾을 수 있습니다 .

예를 들어 다음을 고려하십시오.

!true && false
=> false

not true && false
=> true

첫 번째 예에서는 우선 순위 !가장 높 으므로 false && false.
두 번째 예에서는 not보다 우선 순위가 낮 true && false으므로 false에서 true && false으로 "전환" 되었습니다 true.

일반적인 지침은 !특별한 이유가없는 한 고수해야한다는 것 not입니다. !Ruby에서는 대부분의 다른 언어와 동일하게 작동하며 not.


6
과거에는 부정 된 조건문을 읽기 쉽게하기 위해 'not'을 사용했습니다. 조건문 전체를 부정해야한다면 '!'가 아닌 'not'을 사용하는 것이 편했습니다. 내 코드는 inglush처럼 읽을 때 나는 그것을 좋아하지
jaydel

@jaydel unless이 경우 사용할 수 있습니까?
Jacob

1
@Jacob, 네, 확실히. unless루비 세계에서는 실제로 선호되지 않습니다. 일반적인 합의는 !대부분의 상황에서 잘 작동 할 때 방해가된다는 것 입니다. 좀 더 표현력이없는 경우가있을 거라고 확신하지만 분명하게 생각합니다.
Brennan

4
나는 그것이 unless불리한 것에 동의하지 않습니다 . 우리가 합의에 가장 가까운 것은 그렇지 않다고 말합니다.
Adam Lassek

1
얼마나 놀라 울 not수 있는지에 대한 예를 공유하고 싶었습니다 . Python에서는 if 문을 더 쉽게 읽을 수 있도록 변수에 부울을 할당하는 경우가 있습니다. 이는 패턴 사용을 의미 할 수 있습니다 x = not y. 여기서 y는 복잡한 것입니다. 루비는 x = !y작동하지만 x = not y얻는다 syntax error, unexpected tIDENTIFIER, expecting '('. 우선 순위는 이것이 작동하려면 할당 op의 오른쪽 주위에 괄호가 필요함을 의미합니다 x = (not y).
S. Kirby

13

not연산자 를 이해하는 쉬운 방법 not true && false은 다음과 같은 것으로 보는 것입니다.!(true && false)

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