ฉันจะอธิบายความแตกต่างระหว่าง NULL และศูนย์ได้อย่างไร


59

การทำงานกับปัญหาที่ใช้สูตรการเปลี่ยนแปลงเปอร์เซ็นต์:

percent change =  100 * [(new value - old value) / old value]

ฉันจะอธิบายความแตกต่างได้อย่างไรnew value or old value = NULLแทนที่จะเป็น0กับคนที่อาจไม่ใช่โปรแกรมเมอร์

เจ้านายของฉันสงสัยว่าทำไมมีสตริงว่างในกล่องข้อความมากกว่าค่าเพราะเรามีค่าเก่า แต่ไม่ใช่ค่าใหม่


11
"ฉันจะอธิบายความแตกต่างได้อย่างไร" ภาษาใด? บางภาษาโยน (หรือยกระดับ) ข้อยกเว้น บางคนจะส่งกลับผลลัพธ์เป็นศูนย์ บางคนขึ้นอยู่กับรายละเอียดของวิธีการใช้งาน NULL คุณต้องเจาะจงมากขึ้น
S.Lott

29
เปลี่ยนกล่องข้อความเพื่อพูดว่า "ไม่มีข้อมูล" แทนสตริงว่าง
เครก

3
@ZJR - แสดงข้อความเป็นสีแดงด้านล่างกล่อง จุดคือ "NULL" หรือสตริงว่างมีการใช้มากใน UI เป็นที่อยู่หน่วยความจำของวัตถุ
detly

10
โดยการเปรียบเทียบอุณหภูมิ 0 องศาและไม่มีการอ่านอุณหภูมิเป็นสถานการณ์ที่แตกต่าง ...
NWS

4
ฉันไม่สามารถตอบได้ตอนนี้มันได้รับการคุ้มครอง แต่ฉันมักจะอธิบายว่าNULLเป็นรัฐไม่ใช่ค่า - หมายความว่าคุณไม่ทราบคุณค่า สำหรับ SQL โดยปกติฉันใช้การเปรียบเทียบพรรคเพื่อสาธิต
JNK

คำตอบ:


101

ในการอธิบายเจ้านายความแตกต่างระหว่าง "ศูนย์" และ "โมฆะ":

"ศูนย์" คือค่า มันเป็นปริมาณที่ไม่ซ้ำกันและเป็นที่รู้จักของศูนย์ซึ่งมีความหมายในทางคณิตศาสตร์และคณิตศาสตร์อื่น ๆ

"Null" เป็นค่าที่ไม่ใช่ มันเป็น "ตัวยึด" สำหรับค่าข้อมูลที่ไม่รู้จักหรือไม่ได้ระบุ มันมีความหมายในบริบทนี้เท่านั้น การดำเนินการทางคณิตศาสตร์ไม่สามารถทำได้บนค่า Null (ผลลัพธ์ของการดำเนินการใด ๆ ที่ไม่ได้กำหนดไว้และโดยทั่วไปแล้วจะแสดงเป็นค่า Null)

ตัวอย่างเช่นในความคิดเห็น: "รายได้ต่อปีของคุณคืออะไร" เป็นคำถามที่ต้องการคำตอบที่เป็นตัวเลข "0" เป็นคำตอบที่ถูกต้องสมบูรณ์แบบสำหรับคนที่ไม่ทำงานและไม่มีรายได้จากการลงทุน หากผู้ใช้ไม่ได้ป้อนค่าเลยพวกเขาไม่จำเป็นต้องทำเงิน พวกเขาไม่ต้องการบอกซอฟต์แวร์ของคุณว่ามีจำนวนเท่าใด (หรือน้อย) มันเป็นสิ่งแปลกปลอมไม่ระบุ ดังนั้นเพื่อให้ซอฟต์แวร์สามารถดำเนินการต่อได้คุณต้องระบุตัวยึด "null" สำหรับเขตข้อมูลนั้นภายในซอฟต์แวร์ นั่นเป็นเทคนิคที่ถูกต้องจากมุมมองข้อมูล ไม่ว่าจะเป็นที่ถูกต้องในระดับธุรกิจขึ้นอยู่กับว่าจำเป็นต้องมีค่าตัวเลขจริง (แม้กระทั่งศูนย์) เพื่อดำเนินการทางคณิตศาสตร์ (เช่นการคำนวณภาษีหรือการเปรียบเทียบกับเกณฑ์การกำหนดผลประโยชน์)

ในคอมพิวเตอร์แทบการดำเนินการใด ๆ กับตัวแปรที่มีค่า null จะส่งผลให้เป็นโมฆะหรืออยู่ในเงื่อนไขข้อผิดพลาดเนื่องจากไม่รู้จักค่าหนึ่งในตัวแปรจึงไม่สามารถทราบผลลัพธ์ของนิพจน์ได้ สิ่งที่เทียบเท่ากับการคำนวณทางคณิตศาสตร์เป็นโมฆะก็คือถ้าฉันถามคุณว่า "ห้าบวกกับจำนวนที่ฉันกำลังคิดตอนนี้คืออะไร" เป็นไปไม่ได้ที่คุณจะให้คำตอบที่ชัดเจนเพราะคุณไม่รู้ว่าฉันกำลังคิดอะไรอยู่ การดำเนินการเป็นศูนย์ยกเว้นสำหรับการหารโดยปกติแล้วจะถูกต้องและจะส่งกลับค่าที่ไม่ซ้ำใครที่รู้จักและไม่ซ้ำกัน


37
"ตัวยึด" เป็นคำอธิบายที่เป็นประโยชน์ หากคุณทำแบบสำรวจและถามว่า "คุณอายุเท่าไหร่" และมีคนข้ามคำถามนั้นไปคุณไม่ควรแสดงคำตอบนั้นเป็น 0 นั่นคือสมมุติฐาน (อาจเป็นเท็จ) NULLการเป็นตัวแทนที่ถูกต้องจะเป็น
นาธานลอง

ดังนั้นเราสามารถพูดได้ว่า NULL เป็นตัวยึดตำแหน่งในหน่วยความจำที่มีชนิดข้อมูลที่ไม่ได้กำหนดใช่ไหม?
Maxood

1
@ Maxood - มันขึ้นอยู่กับภาษาการเขียนโปรแกรม ฉันจะพิจารณาตัวแปรจำนวนเต็มที่ได้รับอนุญาตให้เป็นโมฆะ (ใช้ไวยากรณ์?) และตั้งค่าเป็นโมฆะเพื่อให้ไม่มีค่าจำนวนเต็มที่รู้จัก เป็นที่รู้จักประเภทที่คาดไว้ดังนั้นเมื่อต้องการบอกว่าไม่ได้กำหนดไว้ชนิดหนึ่งอาจพิจารณาว่าไม่ถูกต้อง 100% มันถูกต้องที่จะบอกว่าnullไม่มีค่าหรือชนิด โดยส่วนตัวฉันจะบอกว่าโมฆะหรือประเภทโมฆะไม่ได้กำหนดขึ้นอยู่กับบริบทและภาษาที่คุณใช้ ใน C # มันจะหมายถึงว่าการอ้างอิงไปยังวัตถุจะไม่ได้กำหนด
Ramhound

NULLเป็นคำอธิบายที่ขาดข้อมูลไม่ใช่ตัวยึดตำแหน่งมันเป็นเพียงการนำเสนอเพียงอย่างเดียวโดยไม่มีข้อมูล

คำศัพท์ "ตัวยึด" อยู่ในคำตอบนี้ตั้งแต่โพสต์ครั้งแรกและฉันจะไม่เปลี่ยนตอนนี้ การแก้ไขที่กระทบคำถามนี้เพื่อชี้แจงประเด็นอื่น ๆ ในคำอธิบาย ตามที่นำมาใช้ในเกือบทุกภาษาย่อมเป็น "ตัวยึด" ตำแหน่งที่สงวนไว้ในหน่วยความจำที่แอดเดรสศูนย์ที่มีอยู่ในโครงสร้างของโปรแกรมเพื่อวัตถุประสงค์ในการแสดง "อ้างอิง" โดยตัวชี้หน่วยความจำเพื่อระบุว่าพวกเขาชี้ไปที่ไม่มีประโยชน์ใด ๆ นั่นเป็นมากกว่า OP จะต้องบอกเจ้านายของเขา
KeithS

172

เจ้านายพูดได้ยากเสมอ ...

Zero คือตัวเลขดังนั้นคุณสามารถทำสิ่งต่าง ๆ ได้

Null เป็นยูนิคอร์น มันไม่มีอยู่คุณจึงไม่สามารถทำอะไรได้เลย


45
+1 สำหรับยูนิคอร์น! ฉันต้องเพิ่ม: คำอธิบายที่ดีมาก
BЈовић

14
ฉันอาจต้องเริ่มใส่คำสั่งของฉัน: NVL(somefield,'UNICORN');)
FrustratedWithFormsDesigner

11
จากนั้นเจ้านายอาจถามว่า "ทำไมเราไม่ทำมันให้เป็น 0 เราก็จะทำอะไรกับมันได้บ้าง?
AlbeyAmakiir

26
@AlbeyAmakiir - การตอบสนองที่ถูกต้องกับเจ้านายก็คือ "ในขณะที่เราแสร้งทำเป็นรู้สิ่งที่เราไม่รู้ทำไมเราไม่สร้างให้ 1 ล้าน? ดีและใหญ่มาก"
นาธานลอง

12
ฉันไม่อยากจะเชื่อเลยว่ามันจะได้คะแนนมากกว่า 90 คะแนน ฉันจะเริ่มใส่ยูนิคอร์นในคำตอบทั้งหมดของฉัน
Morons

38

เพียงใช้ถ้อยคำสมการใหม่ในประโยค:

"เปอร์เซ็นต์การเปลี่ยนแปลงคืออะไรถ้าคุณเริ่มต้นด้วยค่าที่ไม่รู้จักและคุณจะได้ 150"

และ

"เปอร์เซ็นต์การเปลี่ยนแปลงคืออะไรถ้าคุณเริ่มต้นด้วย 85 และคุณจะได้ค่าที่ไม่รู้จักบ้าง"

แน่นอนคำตอบสำหรับทั้งคู่คือ"ไม่สามารถคำนวณได้เพราะส่วนหนึ่งที่สำคัญของการคำนวณหายไป" นั่นคือสาระสำคัญของ 'null'

มันควรจะง่ายกว่าถ้าจะหาประโยคเทียบเท่ากับศูนย์แล้วดูว่ามันต่างกันอย่างไร:

"เปอร์เซ็นต์การเปลี่ยนแปลงคืออะไรถ้าคุณเริ่มต้นด้วย 0 และคุณจบลงด้วย 150"

และ

"เปอร์เซ็นต์การเปลี่ยนแปลงคืออะไรถ้าคุณเริ่มต้นด้วย 85 และคุณจบลงด้วย 0"

แม้ว่าคำตอบอาจไม่สมเหตุสมผลนัก (มีเลขศูนย์) อย่างน้อยก็สามารถคำนวณได้ ด้วยโมฆะการคำนวณเป็นไปไม่ได้แม้กระทั่ง


2
+1 "ไม่ทราบ" เป็นคำอธิบายที่ดีมากและอธิบายได้ง่ายในประโยค
Scott Rippey

@ScottRippey - ฉันจะเถียงว่าไม่ได้unknownมันไม่ได้อยู่เพียงเพราะในกรณีของNULLร้อยละมีจริงไม่มีค่าตัวเลขใด ๆ (ร้อยละ) หรือค่าร้อยละอื่น ๆ
Ramhound

2
@ แรมฮาวด์นี่คือสิ่งที่ฉันพยายามจะทำในบริบทของคำถามเดิม: "ไม่ทราบ" หมายถึง "ตัวยึด" ในคำตอบของ KiethS ซึ่งฉันคิดว่าเป็นคำอธิบายที่ดี สำหรับเจ้านายที่ไม่ได้เป็นโปรแกรมเมอร์นั่นหมายความว่าอาจมีค่าอยู่บ้าง แต่เราไม่ได้มีมัน (ในฐานข้อมูลระบบรูปแบบและอื่น ๆ ) มีคุณค่าหรือไม่? เรามีข้อมูลไม่เพียงพอที่จะรู้ไม่ทางใดก็ทางหนึ่ง ข้อมูลหายไป นั่นคือความหมายที่แตกต่างกันอย่างละเอียดกว่าไม่มีอะไรซึ่งอนุมานมีค่าที่จะได้ไม่มี ขึ้นอยู่กับบริบทของการสนทนาคำอธิบายอาจถูกต้อง
Eric King

20

เมื่อพูดกับเจ้านายของคุณเพียงใช้0เป็นศูนย์และ?เป็นโมฆะ มันจับภาพได้อย่างถูกต้องว่ามันเป็นตัวแทนสำหรับบางสิ่งบางอย่างแต่คุณไม่รู้ว่ามันคืออะไร


? ฉลาดเรียบง่ายและสื่อถึงแนวคิดที่ชัดเจนสำหรับคนทั่วไป
nelaaro

12

เกี่ยวกับสิ่งนี้:

  • 0 คำตอบของ "ปริมาณของเหลวในขวดเปล่ามีเท่าไหร่"
  • NULL คำตอบของ "เนื้อหาของขวดเปล่าคืออะไร"

หรือถ้าคุณจินตนาการถึงชายที่ไม่มีบุตร:

  • จำนวนลูกของเขาคือ 0
  • ลูกคนโตของเขาคือ NULL

ความแตกต่างพื้นฐานคือ0ปริมาณที่วัดได้ในขณะที่NULLเกี่ยวกับการมีอยู่ การเป็นปริมาณ0หมายถึงบางสิ่งเช่นปริมาณนั่นก็0เหมือนกับการ0.000000001แทนปริมาณ (สิ่งหนึ่งที่มีปัญหาในชีวิตประจำวันคืออันที่จริงแล้วแยกไม่ออก0) ในทางตรงกันข้ามกับที่NULLแสดงให้เห็นถึงอะไร NULLในความเป็นจริงไม่มีอะไรที่ใกล้กับเป็น ค่าใด ๆ ของตัวแปร (และนิพจน์) เป็นอย่างใดNULLอย่างหนึ่ง


8

นั่นเป็นวิธีที่ฉันอธิบายได้เสมอว่า:

0 คือหมายเลข 0

NULL คือนิพพาน, ไม่มีอะไร, nada, niente, ไม่มีตัวตน, ขาดหายไป

การดำเนินการทางคณิตศาสตร์ที่กำหนดบน NULL ให้ผลลัพธ์เป็น NULL เสมอ

... ทำงานให้ฉันจนถึงตอนนี้


8
ค่า NULL เป็นการหยุดความทุกข์อย่างสมบูรณ์หรือไม่? ว้าว! ฉันต้องใช้มันในรหัสของฉันมากขึ้น
Claudiu

ใช่ 0 คือตัวเลข null เป็นกรณีที่ไม่มีของใด ๆจำนวน
Michael Durrant

7

ทำไมคุณไม่เริ่มด้วยการถามคำถาม "ทำไมค่าเท่ากับ NULL" ซึ่งอาจช่วยให้คุณอธิบายได้ว่าทำไมการคำนวณอาจไม่ถูกต้อง

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

สิ่งเดียวกันอาจเป็นจริงสำหรับค่าเก่าที่หายไป แต่ฉันมีเวลายากที่จะเข้าใจว่าค่าเก่าจะหายไปได้อย่างไร (ยกเว้นกรณีนี้เป็นการคำนวณครั้งแรกหรือแบตเตอรี่เสียชีวิตและข้อมูลสูญหาย) แต่คุณอาจต้องการ แสดงสัญลักษณ์ที่บ่งบอกถึงเงื่อนไขนี้เช่นกัน

ไม่ว่าในกรณีใดคุณไม่ต้องการให้สิ่งนี้เกิดขึ้น:

ป้อนคำอธิบายรูปภาพที่นี่

แหล่งที่มาของภาพ


+1 นี่คือคำตอบ: อธิบายว่าทำไมค่าจึงเป็นโมฆะ หากคุณไม่สามารถอธิบายได้แสดงว่าคุณมีข้อบกพร่อง
MarkJ

5

OldValue=Null คุณไม่รู้ค่าเก่าดังนั้นจึงไม่ทราบความแตกต่าง (ว่าง)

OldValue=0 คุณรู้ว่าค่าเก่ามันเป็น 0 ดังนั้นความแตกต่างคือไม่มีที่สิ้นสุด (ว่าง)

หากสำคัญที่จะต้องแยกความแตกต่างระหว่างสองสิ่งนี้ให้เก็บค่าเดิมเป็นPreviousValueและแสดงที่ใดที่หนึ่ง


แก้ไขตามความคิดเห็นด้านล่าง:
ฉันจะถามเขาว่าเขาต้องการทำอะไรในสถานการณ์ต่อไปนี้และแสดงให้เขาเห็นตัวอย่างของสิ่งเหล่านี้ จากนั้นและถามเขาว่า "คุณต้องการแสดงค่าเหล่านี้เป็นค่าอะไร?"

อย่าทำเรื่องนี้เป็นเรื่องคอมพิวเตอร์ แต่อย่างใดมันเป็นคำถามทางธุรกิจ


ฉันไม่คิดว่าเจ้านายของฉันจะเข้าใจสิ่งที่คุณเพียงแค่กล่าวว่า :)
OO

+1 สำหรับการเข้าใกล้เป็นคำถามทางธุรกิจ เจ้านายมีแนวโน้มที่จะไม่สนใจเกี่ยวกับการนำไปปฏิบัติ
อัลเลนกูล

4

ฉันประสบความสำเร็จมากมายกับ 'blank'

ด้วยคนที่เข้าใจพีชคณิตพื้นฐาน (หรือความคิดง่ายๆที่คุณสามารถกำหนดค่าให้กับสัญลักษณ์) ความคิดของค่า 'ว่างเปล่า' ดูเหมือนจะตรงไปตรงมาสวยและแตกต่างจากค่าศูนย์


4

ค่า NULL ไม่ใช่ค่า แต่เป็นค่าที่ขาดไป ศูนย์ยังคงเป็นค่า (แม้ว่าจะสามารถใช้ในกรณีที่ไม่สามารถประเมินได้อย่างเต็มที่

โดยการเปรียบเทียบ (เป็นวิธีที่ดีในการอธิบายให้ผู้อื่นรู้

if I have three apples then I subtract three apples how many apples do I have? is 0

If I have a bag of apples and I never look in the bag, how many apples do I have? is null

แม้ว่าในกรณีนี้ทั้งสองอาจมีค่าเท่ากัน (ขึ้นอยู่กับความสามารถของคุณ) พวกเขามีแนวคิดแตกต่างกันมาก


4

จริง ๆ มันไม่เกี่ยวข้องว่าเจ้านายของคุณเป็นโปรแกรมเมอร์ ปัญหานี้เกิดจากแนวคิดที่ไม่ใช่เชิงเทคนิค

ขอให้เขาสมมติว่าคุณได้รับการเพิ่ม เงินเดือนเก่าของคุณคือ 175k แต่เงินเดือนใหม่ของคุณไม่เป็นที่รู้จัก จากนั้นถามเขาว่า - คุณได้รับการเพิ่มเปอร์เซ็นต์กี่เปอร์เซ็นต์?

หากเขาถูกปิดการใช้งานทางคณิตศาสตร์ให้ดำเนินการตามขั้นตอนจนกว่าเขาจะเห็นว่าลิงก์ที่หายไปอยู่ที่ไหน


3

ฉันใช้เหรียญพลิก จริงคือหัว, เท็จคือก้อย, และมือข้างหนึ่งป้องอีกข้างหนึ่งซ่อนเหรียญคือ NULL ถ้าคุณรู้ว่าเหรียญเป็นหัวมันง่ายมากที่จะตอบคำถาม "อะไรคือสิ่งที่ตรงกันข้ามกับค่านี้" มือข้างหนึ่งซ่อนเหรียญจะแสดงได้ง่ายมากว่าบุคคลนั้นสามารถตอบได้หากคุณต้องการให้พวกเขาเห็นมูลค่าปัจจุบัน แต่เนื่องจากคุณไม่ทำเช่นนั้นพวกเขาไม่สามารถให้คำตอบได้ สำหรับสิ่งที่พวกเขารู้คุณไม่มีแม้แต่เหรียญอยู่ในมือของคุณ!


1

ในเขตข้อมูล NULL บอกว่าฉันไม่มีความคิด ไม่มีข้อมูลที่นี่ - มันว่างเปล่า Zero (0) บอกว่าฉันรู้ว่าค่าของเขตข้อมูลนี้เป็น 0 อย่างแม่นยำเช่นจำนวนเต็มที่ต่ำกว่าหมายเลขหนึ่ง

เช่นฉันอาจมีกระดาษแผ่นหนึ่งที่ฉันพิมพ์ลงในระบบคอมพิวเตอร์ที่บอกว่าลูกค้าแต่ละรายเป็นหนี้เท่าไร ลูกค้า A เป็นหนี้ $ 50 ลูกค้า B เป็นหนี้ $ 0 และลูกค้า C เป็นหนี้ NULL (????) เนื่องจากจำนวนเงินที่ลูกค้า C เป็นหนี้จำนวนถูก redacted (มีคนลากเส้นสีดำทับและไม่สามารถอ่านได้หรือมีข้อความระบุว่า ใบเรียกเก็บเงินของพวกเขาสำหรับยังไม่พร้อม) ฉันสามารถบอกได้ว่าลูกค้า B เป็นหนี้ได้ $ 0 และสามารถบอกได้อย่างสบาย ๆ ว่าฉันไม่ทราบว่าลูกค้า C เป็นหนี้อะไร ฉันไม่ต้องการเรียกเก็บเงินลูกค้า C $ 0 (เพราะพวกเขาอาจเป็นหนี้เงิน)


1

สมมติว่าเราไม่ได้รับสิ่งที่เฉพาะเจาะจงภาษาเช่น:

#define NULL 0

ความแตกต่างคือ 0 เป็นค่าตัวเลขที่ NULL ไม่ใช่ มันเหมือนเซลล์ว่างเปล่าบนกระดาษกราฟหนึ่งแผ่น เซลล์สามารถมี "0" อยู่ในนั้น แต่ก็สามารถว่างเปล่า Null ยังคงเป็นค่า แต่คุณถือว่าเป็นพิเศษ ตัวอย่างเช่นหากเซลล์ของคุณมีอักขระคุณอาจใช้เซลล์ว่างเป็นช่องว่างและเซลล์ null จะไม่สามารถทำได้อีกต่อไปเว้นแต่ว่าคุณจะกำหนดหรือสร้างอักขระให้เป็นกรณีพิเศษ

ความหมายของโมฆะขึ้นอยู่กับวิธีตีความข้อมูล:

  • ข้อมูลว่างอาจหมายถึง "ยังไม่ได้ระบุ" และโปรแกรมจะรอสักครู่ก่อนตรวจสอบค่าอีกครั้ง
  • ข้อมูลอาจไม่สามารถมีค่า Null ได้ มันอาจถูกตีความอย่างเคร่งครัดว่าเป็นจำนวนเต็มและค่าที่ไม่ใช่จำนวนเต็มจะเป็นไปไม่ได้
  • โดยทั่วไปในหน่วยความจำที่อยู่ 0 ถูกตีความว่าเป็นโมฆะซึ่งหมายความว่าไม่สามารถใช้งานได้

NULL == 0ทำงานได้ดีเมื่อคุณจัดการกับพอยน์เตอร์พอยน์เตอร์ใน C และคณะ หากคุณกำลังพยายามอธิบายแนวคิดต่อหัวหน้าที่ไม่ใช่โปรแกรมเมอร์ของคุณด้วยการแสดงรหัสพวกเขาแสดงว่าคุณทำผิด
Tullo_x86

1

ฉันจะเรียกใช้การตรวจสอบ NVL และถ้าหนึ่งในพารามิเตอร์เป็นโมฆะฉันจะแสดงสตริง "N / A" (ไม่กลับ "0" เพราะมันไม่เป็นความจริง!)

นี่คือสิ่งที่จากมุมมองของผู้จัดการจะดูเป็นมืออาชีพมากขึ้นแล้วแสดงค่า NULL ซึ่งดูเหมือนว่าคุณมีข้อบกพร่อง (ซึ่งแน่นอนว่าคุณไม่มี - แต่เป็นวิธีที่ดูเป็นวิศวกรที่ไม่ใช่) .


+1 เจ้านายและผู้ใช้ทุกคนไม่สนใจความหมายของ null พวกเขาต้องการคำอธิบายที่มีความหมายเกี่ยวกับคุณค่า หากไม่มีค่าเก่าหรือใหม่ก็ไม่มีการเปลี่ยนแปลง
jqa

1

เรามีค่าเก่า แต่ไม่ใช่ค่าใหม่

ดูเหมือนว่าในใจของเขาไม่มีค่าใหม่ไม่ได้หมายความว่ามันไม่เป็นที่รู้จัก มันเหมือนกับค่าเก่า คุณสามารถเขียนโค้ดนั้นได้โดยไม่ต้องอธิบายว่าเป็นโมฆะเพราะในใจของเขามันจะไม่เป็นโมฆะ

แทนที่จะเถียงประเด็นเกี่ยวกับ NULLs เพียงตรวจสอบให้แน่ใจว่านี่จะไม่สร้างปัญหาอื่น ๆ การมีข้อมูลที่เก่าเกินไปมีอะไรบ้าง เมื่อมีคนเห็นการเปลี่ยนแปลง 0% พวกเขากดปุ่มตกใจหรือไม่? สิ่งนี้จะบิดเบือนการวิเคราะห์หรือมวลรวมเมื่อเวลาผ่านไปหรือไม่

ฉันไม่คิดว่าเขาต้องการการสอนการเขียนโปรแกรมคอมพิวเตอร์ แต่มันจะดีถ้าเขารู้ว่าโมฆะคืออะไรและถามคำถามที่ถูกต้องแทน


1

ถ้าold valueเป็นโมฆะผลลัพธ์ของสมการควรเป็นโมฆะ นี่เป็นเพราะ null ไม่ใช่ตัวเลขมันหมายถึงค่าที่ไม่รู้จัก ดังนั้นการคำนวณไม่สามารถดำเนินการต่อได้

แน่นอนว่าสมการของคุณจะล้มเหลวหากold value = 0คุณไม่สามารถหารด้วยศูนย์ได้

โดยทั่วไปคุณจัดการสิ่งเหล่านี้ด้วยคำสั่ง case ที่จะพาคุณไปยังเส้นทางของสิ่งที่คุณต้องการแสดง ดังนั้นถ้าคุณต้องการผลลัพธ์ที่จะแสดงเป็นโมฆะเมื่อคุณไม่สามารถคำนวณได้ (เช่นเดียวกับโมฆะหรือศูนย์แล้วคุณจะทำคำสั่งกรณีเช่น

case when [old value] = 0 then null 
else 100 * (([old value] - [new value]) /[old value]) 
end

จากผู้ใช้มุมมอง 0 และ NULL ในกรณีของค่าเก่าจะไม่ถือเอาความแตกต่าง (เช่นถ้าฉันต้องแสดงค่าในกล่องข้อความ) เมื่อเปลี่ยนเป็นเปอร์เซ็นต์การไม่มีค่าอาจหมายถึงค่าว่างหรือศูนย์ใช่ไหม
OO

ในการเปลี่ยนแปลงเปอร์เซ็นต์ศูนย์หมายถึงโดยเฉพาะไม่มีการเปลี่ยนแปลง (ค่าเก่าและใหม่เหมือนกันทั้งหมด), null หมายถึงมีการเปลี่ยนแปลง แต่ไม่สามารถกำหนดเปอร์เซ็นต์ได้ นี่คือเหตุผลที่คุณอาจไม่ต้องการแสดงผลลัพธ์เป็นศูนย์เนื่องจากทำให้เข้าใจผิด
HLGEM

1

การอภิปรายที่ดีเกี่ยวกับการเปรียบเทียบเพื่ออธิบายแง่มุมเชิงกลของสัญลักษณ์ null เมื่อเทียบกับค่าอื่น ๆ อย่างไรก็ตามประเด็นสำคัญของคำถามนี้อาจมาจากมุมมองของผู้จัดการในการแสดงผลลัพธ์ใน UI อย่างเพียงพอซึ่งแสดงถึงขีด จำกัด ที่มีความหมายของสูตรการเปลี่ยนแปลง perecnt ที่นำไปใช้กับปัญหาเฉพาะของพวกเขา

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

เมื่อบางสิ่งถูกวัดครั้งแรก (oldValue === NULL) การเปลี่ยนแปลงเปอร์เซ็นต์จะไม่สามารถใช้ได้ และอาจ / ควรได้รับการบันทึกไว้อย่างชัดเจนว่าเป็นการวัดเริ่มต้นสำหรับวัฏจักรการวัดนั้น

เมื่อไม่มีสิ่งใดถูกวัด (newValue === NULL) การเปลี่ยนแปลงเปอร์เซ็นต์ที่เกิดขึ้นจริงที่เกิดขึ้นจริงจะมีค่าเป็นศูนย์ (สมมติว่าไม่ใช่ศูนย์ในรอบก่อนหน้า) ศูนย์โดยทั่วไปคำตอบที่เหมาะสมกับสูตรในกรณีนี้คือ ไม่มีการวัดในรอบล่าสุดนี้ดังนั้นจึงไม่มีการเปลี่ยนแปลงที่วัดได้ สิ่งนี้ไม่ควรบอกเป็นนัยว่ามันไม่ได้เปลี่ยนแปลงเพียงว่าไม่มีสิ่งใดถูกวัดบันทึกหรือสื่อสารเกี่ยวกับแง่มุมนั้น


0

แน่นอนพวกเขาเข้าใจแนวคิดของการวาง "N / A" ในแบบฟอร์มเมื่อพวกเขาหมายถึง "ไม่พร้อมใช้" ตัวอย่างเช่นในการตอบคำถาม "เบนจามินแฟรงคลินอายุเท่าไหร่" คำตอบ 0 และ N / A แตกต่างกันอย่างเห็นได้ชัด (และหลังถูกต้อง) ในทำนองเดียวกันคำตอบ 0 และ NULL นั้นแตกต่างกัน


0
  • NULL คือการไม่มีค่า
  • -Zero- คือค่าและค่านั้นคือ -Zero-

ถ้าฉันต้องอธิบายแนวคิดเหล่านี้กับใครสักคนฉันจะวาดสองกล่อง

  • กล่องเปล่าจะเป็นตัวแทนของ NULL
  • กล่องที่มีตัวเลข -Zero- อยู่ในนั้นจะแทน -Zero-

0

ความแตกต่างระหว่าง 0 และ null เป็นเหมือนความแตกต่างระหว่างการมีบัญชีธนาคารที่มียอดคงเหลือ 0 และไม่มีบัญชีธนาคารเลย


-1

นี่คือคำอธิบายที่ดีที่สุดกับพอยน์เตอร์

var a -> [0] // variable a is initialized and set to hold 0
var b -> [123asgeb0] // variable b is initialized but not set, memory is pointed to, but holds whatever was there last

ด้วยเหตุนี้ถ้าภาษาของคุณไม่ได้ติดตามตัวแปร NULL สำหรับคุณแล้วคุณจะใช้สิ่งที่มีอยู่แล้ว สิ่งนี้สามารถนำไปสู่การโอเวอร์โฟลด์การคอร์รัปชั่นเสียหายหรือผลข้างเคียงที่น่ารังเกียจอื่น ๆ

หากภาษาที่ไม่ติดตามตัวแปรโมฆะแล้วมันจะมีกรณีที่ระบุไว้สำหรับการจัดการนี้ IE ถือว่า NULL เป็นศูนย์, โยนข้อยกเว้น, ถือเป็น nop เป็นต้น

ในการสาธิตให้เจ้านายของคุณรับกระดาษที่ใช้แล้วสองสามชิ้น

  1. ใช้ 2 แก้วและไม้สีขาว
  2. ทำให้ส่วนของหน้าเป็นสีขาวขึ้นและเขียนเป็นศูนย์
  3. วางแก้วเหนือสิ่งนั้น (นี่คือ var a)
  4. วางแก้วทับส่วนอื่นของหน้า (นี่คือ var b)

-1

ตัดสินโดยความหลากหลายของคำตอบสำหรับคำถามนี้มันสามารถสรุปสิ่งที่เรารู้แล้ว: null อาจหมายถึงหลายสิ่ง

อาจหมายถึงข้อมูลคือ:

  • ไม่เป็นที่รู้จัก
  • รู้ว่าไม่เป็นที่รู้จัก
  • ไม่ถูกต้อง (เช่นข้อผิดพลาดการวัด)
  • ไม่สามารถเข้าถึงได้ (เช่นการรักษาความปลอดภัยที่ชาญฉลาด)
  • ทราบว่าเป็นที่รู้จัก แต่ไม่เกี่ยวข้องกับการประมวลผลข้อมูลปัจจุบัน
  • ข้อมูลไม่มีที่สิ้นสุด (มักใช้ในฐานข้อมูล)
  • อาจเป็น 10 สิ่งเพิ่มเติมที่ฉันไม่คิด

สำหรับเหตุผลนี้และอีกหลายเหตุผลมันมักจะมีประโยชน์ในการกำหนดโครงสร้างข้อมูลที่ห่อหุ้มความหมายของค่า Null (เช่นคลาสเสริม)


-2

คนที่เคยได้รับสิ่งนี้ไม่มีอารมณ์ขัน FWIW ฉันเป็นสถาปนิกตัวเอง

Null เป็นความว่างเปล่า ตามตำนานมี 17 รสชาติ (ความหมายที่เป็นไปได้) ของ Null รวมถึง "ฉันไม่รู้", "พวกเขาไม่ได้พูด" และ "ใครซักคนนี้" ไม่มีใครรู้ว่าทำไมยกเว้น DBA และสถาปนิกที่ทำหน้าบึ้งจากห้องมืดด้านหลังของโปรแกรมเมอร์เท่านั้น พวกเขายิ้มอย่างสุภาพต่อผู้บังคับบัญชาและพูดจาแปลก ๆ ด้วยความกังวลอย่างลึกซึ้งด้วยปัญญาที่ซับซ้อนที่เป็นไปไม่ได้ที่จะต้องเป็นเช่นนั้นและมีความสำคัญอย่างยิ่ง เช็คจ่าย ถึงอย่างนั้น Nulls ก็ไม่เคยบอกความลับของพวกเขา มันเป็นหลุมดำที่ว่างเปล่า หนึ่งโมฆะไม่เท่ากับโมฆะอีกอันหนึ่งเพราะความว่างเปล่าแต่ละอันนั้นว่างเปล่าของความเสมอภาคและปฏิเสธที่จะยอมรับว่ามันอาจจะไม่ว่างเปล่าทั้งหมด แน่นอนว่านี่คือการคาดเดาเพราะไม่มีการเคารพตนเองในทางใดทางหนึ่งที่จะยอมรับได้ บางครั้งค่า null จะดูดข้อมูลจริงจำนวนมหาศาลลงใน () สิ่งนี้เรียกว่าข้อผิดพลาด แต่จริงๆแล้วเป็นเพียงความว่างเปล่าของจิตใจโปรแกรมเมอร์ที่ลืมเรื่อง nulls ดังนั้นคุณจะเห็นพวกเขาทำสายพันธุ์ในบางครั้ง แต่จะลืมไปอย่างรวดเร็วได้อย่างไรหรือทำไม () บางครั้งก็เป็นสัญญาณของ null หรือลูกพี่ลูกน้องของเขา แต่ไม่ค่อยขัดแย้ง

ซีโร่คือปริมาณที่แน่นอนของบางสิ่งบางอย่าง ศูนย์มีความสุขมากกว่าโมฆะ เลขศูนย์ขี้เกียจและไม่ได้เพิ่มผลลัพธ์มากนัก

สำหรับคำตอบที่ถูกต้องน่าเบื่อ Null คือคำตอบของ "ข้อมูลที่หายไปและข้อมูลที่ไม่เหมาะสม" EF Codd ผู้สร้าง SQL

Codd ยังประดิษฐ์แบบฟอร์มปกติที่ 3 ซึ่งถูกนำไปใช้กับจิตใจของนักวิทยาศาสตร์คอมพิวเตอร์รุ่นใหม่ในรูปแบบของการทรมานเบื้องต้น เมื่อเข้าใจแล้วจะไม่สนใจอย่างสมบูรณ์ สิ่งที่คล้ายกันเกิดขึ้นเมื่อมีการแนะนำการออกแบบเชิงวัตถุ และเราไม่เคยมีความสุขที่จะทิ้งมันไว้ตามลำพังดังนั้นความไม่ตรงกันของอิมพีแดนซ์จึงเพิ่มเข้ามาในการต่อสู้ที่น่าพึงพอใจ

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