XOR หรือ Exclusive Or เป็นฟังก์ชัน Logical คล้ายคลึงกับการใช้ OR แต่ก็มีบางส่วนที่ไม่แตกต่างกันบ้าง เล็กน้อย
XOR
XOR(เงื่อนไข1, [เงื่อนไข2],…)
ก็เหมือนกับ OR นั่นคือ ต้องระบุตรรกะ อย่างน้อย 1 ค่า และจะส่งลัพธ์การทดสอบออกมาเป็น True หรือ False เท่านั้น
(เราสามารถใช้เงื่อนไขได้ถึง 254 เงื่อนไข)
อาร์กิวเมนต์จะต้องสามารถหาค่าเป็นค่าตรรกะได้ เช่น TRUE หรือ FALSE หรืออยู่ใน อาร์เรย์ หรือการอ้างอิงที่มีค่าตรรกะ
ถ้าอาร์กิวเมนต์อาร์เรย์หรืออาร์กิวเมนต์การอ้างอิงเป็นเซลล์ข้อความหรือเซลล์ว่าง ค่าเหล่านั้นจะถูกละเว้นไป
ถ้าช่วงที่ระบุไม่มีค่าตรรกะ XOR จะส่งผลลัพธ์เป็น #VALUE! (ค่าผิดพลาด)
OR VS XOR
ถึงแม้ว่าจะมีความคล้ายคลึงกับ ฟังก์ชัน OR อย่างมาก แต่ในความเป็นจริง จะมีบางอย่างไม่เหมือนกัน จะยกตัวอย่างดังนี้
สำหรับ OR นั้น จะให้ผลลัพธ์เป็นจริง (True) แค่มี 1 เงื่อนไขที่เป็นจริงก็พอแล้ว
แต่ Exclusive Or นั้น ถ้าจำนวนเงื่อนไขที่เป็นจริง (True) เป็นเลขคี่ จะให้ผลลัพธ์เป็น จริง
ถ้าจำนวนเงื่อนไขที่เป็นจริง (True) เป็นเลขคู่ หรือ จะให้ผลลัพธ์เป็น เท็จ
อ้าว งง งงละสิ ตอนที่เห็นข้อกำหนดของฟังก์ชันนี้แรก ๆ ก็งงเหมือนกัน
ก่อนอื่น ดูภาพประกอบก่อน ตัวอย่างนี้สร้างเงื่อนไขมา 4 เงื่อนไข โดยให้ค่า True / False ตามที่เห็น
ดูที่ลำดับที่ 1 จากเงื่อนไข 4 เงื่อนไข เป็น True ทั้ง 4 เงื่อนไข ถ้าเป็นฟังก์ชัน OR จะเป็น True (เพราะสำหรับ OR แล้ว ถ้ามีเงื่อนไขใดเงื่อนไขหนึ่งเป็น True ก็จะเป็น True ทั้งหมด ดังนั้น ในลำดับที่ 1 – 4 ผลลัพธ์ของ OR จะเป็น True ทั้งหมด เพราะมีเงื่อนไขที่เป็น True อย่างน้อย 1 เงื่อนไข
แต่ในลำดับที่ 1 ถ้าใช้ฟังก์ชัน XOR ก็จะได้ False เพราะว่า จำนวนเงื่อนไขที่เป็นจริง (True) เป็นเลขคู่ (คือ 4 เงื่อนไขเป็น True)เช่นเดียวกับลำดับที่ 3 ซึ่งมี 2 เงื่อนไขเป็น True จึงได้ผลลัพธ์เป็น False
ในขณะที่ ลำดับที่ 2 และ 4 มีเงื่อนไขที่เป็น True 3 และ 1 เงื่อนไข ซึ่งเป็นจำนวนเงื่อนไขเลขคี่ จึงให้ผลลัพธ์เป็น True
แล้วการวางลำดับ คู่ คี่ มีไว้ทำไม? แล้วใครจะเป็นคนใช้
นั่นสิ พอลองค้นหาใน google ก็เห็นว่าไปในทางการเขียนโปรแกรมเป็นส่วนใหญ่ เช่น
https://blog.loginradius.com/engineering/how-does-bitwise-xor-work/
แต่จะเทียบอย่างนี้
สมมติเหตุการณ์ทดสอบความมีสติของเรา ด้วยสถานการณ์ 3 อย่างคือ
ฝนตกหรือไม่ / เราอยู่ในบ้านหรือเปล่า / และ เรากางร่มหรือเปล่า
โดยสรุปผลเป็น “ถูกแล้ว” ถ้าเป็น True และ “บ้าเปล่า?” ถ้าเป็น False
ดูสถานการณ์แรก ฝนตก อยู่ในบ้าน เรากางร่ม ผลลัพธ์ก็จะเป็น “บ้าเปล่า?” ใครจะไปกางร่มในบ้านตอนฝนตก? จริงมั้ยครับ อันนี้ดู make sense หน่อย แต่จะใช้ฟังก์ชันไหนก็ไม่ต่างกัน
แต่มาดูอีก 2 สถานการณ์
ฝนตก เราอยู่ในบ้าน โดยไม่กางร่ม ผลลัพธ์ก็จะเป็น “ถูกแล้ว” เราจะไปกางร่มทำไม หรือ เราจะออกนอกบ้านทำไมให้เปียกเปล่า ๆ
หรือ
ฝนตก เราอยู่นอกบ้าน กางร่ม ผลลัพธ์ก็จะเป็น “ถูกแล้ว” ถึงจะฝนตก และ อยู่นอกบ้าน แต่อย่างน้อยก็มีร่มกันฝน
2 สถานการณ์นี้ ถ้าเราใช้ OR จะกลายเป็น “บ้าเปล่า?” เพราะ มีเงื่อนไขหนึ่งเป็น True
พอเป็นแบบนี้ การใช้ Exclusive Or ก็ดูสมเหตุผลขึ้นมาทันที