ป้ายกำกับ: Null

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

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

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


นิยามทางแนวคิด ( Conceptual Difference )

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

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

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

แมวของชโรดิงเจอร์ ( Schrödinger’s cat )

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

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

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

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

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

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


ทำไมต้องระวัง ? ( The Danger Zone )

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

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

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