ป้ายกำกับ: Empty

ความหมายค่า Null และ 0ความหมายค่า Null และ 0

ความเข้าใจผิดระหว่าง Null และ 0 เป็นเรื่องคลาสสิกที่สร้างบั๊กในโปรแกรมมานักต่อนัก แม้ทั้งคู่จะดูเหมือน “ความว่างเปล่า” ในสายตาคนทั่วไป แต่ในโลกของคอมพิวเตอร์และฐานข้อมูล ทั้งสองอย่างนี้ทำหน้าที่ต่างกันอย่างสิ้นเชิงครับ

เพื่อให้เห็นภาพชัดเจนที่สุด เรามาดูความแตกต่างผ่านมุมมองต่าง ๆ กันครับ


นิยามทางแนวคิด

  • 0 : คือ “ค่า” ตัวเลขที่มีอยู่จริง มันคือปริมาณที่วัดได้ว่ามีค่าเป็นศูนย์
  • Null: คือ “การไม่มีค่า” หรือความไม่แน่นอน มันคือสถานะที่บอกว่า “เรายังไม่รู้ว่าค่านี้คืออะไร” หรือ “ข้อมูลนี้ไม่ได้ถูกกรอกลงไป”

การเปรียบเทียบเชิงเทคนิค

คุณสมบัติ0 Null
ประเภทข้อมูลตัวเลข สถานะพิเศษ
พื้นที่ในหน่วยความจำจองพื้นที่เพื่อเก็บเลข 0มักจะเป็น Pointer ที่ชี้ไปที่ความว่างเปล่า
การคำนวณ$5 + 0 = 5$$5 + \text{Null} = \text{Null}$
ความหมายมีค่าเป็นศูนย์ไม่รู้ว่าค่าคืออะไร

แมวของชโรดิงเจอร์

แมวของชโรดิงเจอร์ (Schrödinger’s cat) เป็นการทดลองทางความคิดเชิงปรัชญาที่เสนอโดยนักฟิสิกส์ชาวออสเตรีย แอร์วิน ชโรดิงเจอร์ ในปี ค.ศ. 1935 เพื่อแสดงความไม่สมเหตุสมผลของการตีความกลศาสตร์ควอนตัมแบบโคเปนเฮเกน โดยสมมติให้แมวอยู่ในกล่องปิดสนิทพร้อมสารกัมมันตรังสีที่อาจสลายตัวหรือไม่ก็ได้ภายใน 1 ชั่วโมง หากสลายตัว แมวจะตาย ทำให้ตามทฤษฎีควอนตัม แมวอยู่ในสถานะ “ซ้อนทับ” คือทั้งเป็นและตายพร้อมกันจนกว่าจะมีผู้เปิดกล่องสังเกตการณ์ 

ถ้าเรานำทฤษฎี แมวของชโรดิงเจอร์ มาอธิบายความต่างระหว่าง 0 กับ Null เราจะเห็นภาพของ “สถานะ” ได้ชัดเจนขึ้นทันที

  • สถานะ Null
    ในขณะที่แมวอยู่ในกล่องที่ปิดสนิท ตามทฤษฎีควอนตัม แมวอยู่ในสภาวะซ้อนทับ คือ “ไม่รู้ว่าตายหรือเป็น”
    • นี่คือ Null: ข้อมูลยังไม่ถูกเปิดเผย ยังไม่มีการวัดค่า เราไม่สามารถสรุปได้ว่าเป็น 0 หรือ 1
    • สถานะนี้คือ “ความไม่แน่นอน”
  • สถานะ 0 หรือ 1
    เมื่อคุณตัดสินใจเปิดกล่องออกดู ฟังก์ชันคลื่นจะยุบตัวลงเหลือสถานะเดียว
    • ถ้าเปิดมาแล้วแมวตาย: ค่าที่ได้คือ 0
    • ถ้าเปิดมาแล้วแมวยังอยู่: ค่าที่ได้คือ 1
    • 0 และ 1 คือ “ข้อมูลที่มีการยืนยันแล้ว”

สรุปแบบเห็นภาพ

  • Null: คือกล่องที่ยังปิดอยู่
  • 0: คือเปิดกล่องมาแล้วพบว่า “ไม่มีชีวิต”
    มุมมองโปรแกรมเมอร์: > หากคุณเขียนฟังก์ชัน checkCatStatus ()
    • ถ้า return Null แปลว่า “ยังไม่ได้เปิดกล่อง”
    • ถ้า return 0 แปลว่า “เปิดดูแล้ว แมวตาย”

การสับสนระหว่างสองค่านี้ในระบบฐานข้อมูล ก็เหมือนกับการทึกทักไปเองว่าแมวตายแล้วทั้งที่ยังไม่ได้เปิดกล่องดู ซึ่งอาจนำไปสู่ข้อผิดพลาดร้ายแรงในการวิเคราะห์ข้อมูลได้ครับ


ทำไมต้องระวัง ?

ในทาง Programming หรือ SQL การใช้ Null ผิดที่อาจทำให้โปรแกรมพังได้ เช่น

  • การหารด้วย 0: คอมพิวเตอร์จะฟ้องว่า Division by zero
  • การหารด้วย Null: ผลลัพธ์มักจะได้ Null

อ่านเพิ่มเติม