ความแตกต่างระหว่าง "not" และ "!" ในทับทิม


คำตอบ:


145

เกือบจะตรงกัน แต่ก็ไม่มากนัก ความแตกต่างคือการที่!มีความสำคัญสูงกว่าnotเหมือน&&และ||มีความสำคัญสูงกว่าและandor

!มีความสำคัญสูงสุดของผู้ประกอบการทั้งหมดและnotหนึ่งในที่ต่ำที่สุดที่คุณสามารถหาตารางเต็มรูปแบบที่เอกสารทับทิม

ตัวอย่างเช่นพิจารณา:

!true && false
=> false

not true && false
=> true

ในตัวอย่างแรก!มีสูงที่สุดfalse && falseมีความสำคัญเพื่อให้คุณกำลังจะบอกว่าได้อย่างมีประสิทธิภาพ
ในตัวอย่างที่สองnotมีความสำคัญต่ำกว่าtrue && falseดังนั้นนี้ "เปลี่ยน" การfalseจากไปtrue && falsetrue

แนวทางทั่วไปดูเหมือนว่าจะเป็นไปได้ว่าคุณควรจะติดถ้าคุณมีเหตุผลที่เฉพาะเจาะจงกับการใช้งาน! ในทับทิมมีพฤติกรรมเช่นเดียวกับภาษาอื่น ๆ มากที่สุดและเป็น "น้อยน่าแปลกใจ" กว่าnot!not


6
ฉันเคยใช้คำว่า "not" ในอดีตเพื่อให้อ่านเงื่อนไขเชิงลบได้ง่ายขึ้น หมายความว่าถ้าเงื่อนไขทั้งหมดควรถูกลบล้างฉันรู้สึกสบายใจที่จะใช้ 'not' มากกว่า '!' ฉันชอบเมื่อรหัสของฉันอ่านว่า inglush
jaydel

@jaydel ใช้unlessในกรณีนั้นได้ไหม
Jacob

1
@ จาค็อบใช่แน่นอน unlessไม่เป็นที่นิยมในโลกของทับทิม ฉันทามติทั่วไปคือมันเข้ามาในทางที่จะ!ทำงานได้ดีในสถานการณ์ส่วนใหญ่ ฉันแน่ใจว่ามีบางกรณีที่เว้นแต่อาจจะแสดงออกมากกว่านี้ แต่ฉันก็ชัดเจนกว่า
Brennan

4
ฉันไม่เห็นด้วยที่unlessไม่ชอบ สิ่งที่ใกล้เคียงที่สุดที่เราต้องมีมติเป็นอย่างอื่น
Adam Lassek

1
เพียงแค่อยากจะแบ่งปันตัวอย่างของวิธีการที่น่าแปลกใจnotสามารถ ใน Python บางครั้งฉันกำหนดบูลีนให้กับตัวแปรเพื่อให้ if-statement อ่านง่ายขึ้น นั่นอาจหมายถึงการใช้รูปแบบx = not yโดยที่ y เป็นอะไรที่ซับซ้อน ในทับทิมx = !yทำงาน แต่ได้รับx = not y ลำดับความสำคัญหมายถึงนี้ต้องวงเล็บรอบขวาของสหกรณ์ที่ได้รับมอบหมายในการทำงาน:syntax error, unexpected tIDENTIFIER, expecting '(' x = (not y)
เอสเคอร์บี้

13

วิธีง่ายๆในการทำความเข้าใจตัวnotดำเนินการคือการดูnot true && falseว่าเทียบเท่ากับ!(true && false)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.