Są prawie synonimami, ale nie do końca. Różnica polega na tym, że !
ma wyższy priorytet niż not
, podobnie jak &&
i ||
ma wyższy priorytet niż and
i or
.
!
ma najwyższy priorytet wszystkich operatorów, a not
jeden z najniższych, można znaleźć the full table at the Ruby docs.
Jako przykład rozważmy:
!true && false
=> false
not true && false
=> true
w pierwszym przykładzie, !
ma najwyższy pierwszeństwo, więc jesteś skutecznie mówiąc false && false
.
W drugim przykładzie not
ma niższy priorytet niż true && false
, więc ten "zamienił" false
z true && false
na true
.
Ogólna wytyczna wydaje się, że należy trzymać się !
, chyba że masz konkretny powód, aby używać not
. !
w Rubim zachowuje się tak samo, jak większość innych języków i jest "mniej zaskakujący" niż not
.
Najprawdopodobniej dlatego, że na twoje pytanie można odpowiedzieć, przeszukując internet lub czytając jedną z książek o Rubinie. Stack Overflow używało bliskiego powodu, który zasadniczo mówi, że osoba ta nie przeprowadziła wystarczającej ilości badań na proste pytanie. Downwokatorzy * powinni * podać powód, ale rzadko to robią. –