Як я можу пояснити різницю між NULL та нулем?


59

Робота над проблемою, яка використовує формулу зміни відсотка:

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

Як би я пояснив різницю, якщо new value or old value = NULL, а не 0тому, хто не може бути програмістом?

Мій бос цікавиться, чому в TextBox є порожній рядок, а не значення, тому що у нас є старе значення, а не нове значення.


11
"Як би я пояснив різницю"? Якою мовою? Деякі мови кидають (або підвищують) виняток. Деякі повернуть НУЛЬНИЙ результат. Деякі залежать від деталей того, як реалізується NULL. Ви повинні бути набагато конкретнішими.
С.Лотт

29
Змініть текстове поле, щоб замість порожнього рядка сказати "Дані недоступні".
Крейг

3
@ ZJR - відобразити повідомлення червоним кольором під полем. Точка полягає в тому, що "NULL" або порожній рядок мають приблизно стільки ж використання в інтерфейсі, скільки адреса пам'яті об'єкта.
дебют

10
За аналогією, температура 0 градусів і температура відсутності температури - це різні ситуації ...
NWS

4
Я зараз не можу відповісти, що це захищено, але я завжди пояснюю, що NULLце стан , а не значення - це означає, що ви не знаєте значення. Для SQL я зазвичай демонструю аналогію партії.
JNK

Відповіді:


101

Пояснити начальнику різницю між "нулем" і "нулем":

"Нуль" - це значення. Це унікальна, відома кількість нуля, яка має значення в арифметичній та іншій математиці.

"Null" - це нецінність. Це "заповнювач місця" для значення даних, яке не відомо або не вказано. Він має сенс лише у цьому контексті; математичні операції не можуть бути виконані на нулі (результат будь-якої такої операції не визначений, а тому також загалом представлений як нуль).

Наприклад, як у коментарях: "Який ваш щорічний дохід?" це запитання, що вимагає числової відповіді. "0" - цілком коректна відповідь для того, хто не працює і не має інвестиційного доходу. Якщо користувач взагалі не вводить значення, він не обов'язково заробляє гроші; вони просто не хотіли сказати вашому програмному забезпеченню, скільки (або мало) вони роблять. Це невідоме, не вказане; тому, щоб дозволити продовження програмного забезпечення, ви вказуєте "нульовий" заповнювач для цього поля даних у межах програмного забезпечення. Це технічно справедливо з точки зору даних; чи це дійсно на рівні бізнесу, залежить від того, чи потрібне фактичне числове значення (навіть нульове) для виконання математичної операції (наприклад, обчислення податків або порівняння з пороговими значеннями, що визначають пільги).

У комп’ютерах практично будь-яка операція зі змінною, що містить null, призведе до нуля або до помилки, оскільки оскільки одне зі значень змінної не відоме, результат виразу не може бути відомий. Еквівалент виконання математики на нулі було б, якби я запитав у вас "Що таке п’ять плюс число, про яке я зараз думаю?". Ви не можете дати однозначну відповідь, оскільки ви не знаєте числа, про яке я думаю. Операція на нуль, за винятком ділення на неї, зазвичай є дійсною і поверне інше відоме, унікальне значення.


37
"Замісник місця" - корисний опис. Якщо ви провели опитування і запитали "скільки вам років?", А хтось пропустив це питання, ви НЕ повинні представляти цю відповідь як 0. Це робить (мабуть, помилковим) припущення. Правильне представлення було б NULL.
Натан Лонг

Тож ми можемо просто сказати, що NULL є заповнювачем пам'яті з невизначеним типом даних. Право?
Maxood

1
@Maxood - це залежить від мови програмування. Я б вважав цілочисленну змінну, яка дозволена нульовою (використовуючи синтаксис?) І встановлена ​​на null, щоб не було відомого цілого значення. Очікуваний тип відомий, так би мовити його не визначено, можна вважати не на 100% правильним. Правильно сказати, що null не має значення або типу. Я особисто сказав би, що нульовий чи NULL тип не визначається залежно від контексту та мови, якою ви користуєтесь. У C # це просто означатиме, що посилання на об'єкт буде не визначеним.
Рамхаунд

NULLце експлікація НЕМАХ даних, це не заповнювач, це єдине одиночне представлення даних без даних.

Термінологія "заповнювача" була у цій відповіді з моменту її публікації, і я зараз її не зміню. Зміни, які піддавали цьому питанню резервне копіювання, мали з’ясувати інші моменти пояснення. Як це реалізовано на більшості мов, він справді є «заповнювачем місця»; зарезервоване місце в пам'яті за нульовою адресою, яке існує в структурі програми з явним призначенням "посилання" вказівниками пам'яті, щоб вказати, що вони не вказують на нічого корисного. Це більше, ніж ОП потрібно було б сказати своєму начальнику.
KeithS

172

Говорити бос завжди важко ...

Нуль - це число, щоб ви могли робити з ним речі.

Нул - це єдиноріг. Він не існує, тому ви не можете нічого з цим зробити взагалі.


45
+1 для єдинорога! Треба додати: дуже хороше пояснення.
BЈович

14
Можливо, я повинен почати вводити свої запити NVL(somefield,'UNICORN')
:;

11
Тоді начальник може просто запитати: "Чому б ми не зробили це 0, щоб ми могли робити з цим справи? Нульове звучить марно".
AlbeyAmakiir

26
@AlbeyAmakiir - Правильною відповіддю такому начальнику буде: "Поки ми робимо вигляд, що ми знаємо речі, яких не знаємо, чому б нам не заробити 1 мільйон? Це приємно і велико".
Натан Лонг

12
Я не можу повірити, що це отримало понад 90 голосів. Я почну ставити єдинороги у всіх своїх відповідях.
Морон

38

Просто перефразуйте рівняння у речення:

"Яка зміна відсотка, якщо ви починаєте з невідомого значення і закінчуєте 150?"

і

"Яка зміна процентного співвідношення, якщо ви починаєте з 85 і закінчуєте деяким невідомим значенням ?"

Звичайно, відповідь на те і інше: "Це неможливо обчислити, оскільки одна з критичних частин обчислення відсутня". У цьому суть 'null'.

Тоді слід легко зрозуміти рівнозначні речення з нулем і подивитися, як вони принципово відрізняються:

"Яка зміна відсотка, якщо ви починаєте з 0 і закінчуєте 150?"

і

"Яка зміна відсотка, якщо ви починаєте з 85, а в кінці 0?"

Хоча відповіді можуть не мати великого сенсу (з нулями), принаймні це можна порахувати . З нульовим підрахунком навіть неможливо .


2
+1 "Невідомо", безумовно, чудове пояснення, і його легко пояснити реченнями.
Скотт Ріппі

@ScottRippey - Я б стверджував, що значення не є, unknownпросто його не існує, тому що у випадку NULLвідсотка насправді НЕ БУДЬ чисельне числове значення (відсоток) або інше значення відсотка.
Рамхаунд

2
@Ramhound Ось що я намагався досягти в контексті початкового запитання: "Невідомий" являє собою "заповнювач місця" у відповіді KiethS, що, на мою думку, є чудовим поясненням. Для начальника, який не програмує, це означає , що десь там може бути значення, але у нас його немає (у базі даних, системі, формі тощо). Чи є цінність? У нас недостатньо інформації, щоб знати, так чи інакше. Дані відсутні. Це тонко інше значення, ніж нічого , що підводить до того, що значення не було б . Залежно від контексту дискусії, будь-яке пояснення може бути правильним.
Ерік Кінг

20

Під час розмови з вашим начальником просто використовуйте як 0для нуля, так і ?для нуля. Він правильно фіксує, що це заповнювач чогось, але ви не знаєте, що це.


? блискуча, проста і чітко передає цю концепцію для мирян.
nelaaro

12

Як щодо цього:

  • 0 це відповідь на те, «скільки рідини в порожній пляшці?».
  • NULL це відповідь на те, «який вміст порожньої пляшки?».

Або якщо ви уявляєте бездітного чоловіка:

  • кількість його дітей - це 0
  • його найстарша дитина NULL

Основна відмінність полягає 0в вимірюваній кількості, а NULLв існуванні. Будучи величиною, 0є що - то , тобто кількість, тобто 0, як і 0.000000001являє собою кількість (один , що в задачах повсякденному житті є фактично невиразно близько до 0). На відміну від цього нічого неNULL представляє . Насправді немає нічого близького . Значення будь-якої змінної (і виразів) є або чимось.NULLNULL


8

Ось так я завжди успішно пояснюю це:

0 - це число 0.

NULL - нірвана, нічого, nada, niente, неіснування, відсутність.

Арифметичні операції, визначені на NULL, завжди дають результат NULL.

... працював на мене досі.


8
NULL - це повне припинення страждань? Вуа! Я повинен використовувати це більше в своєму коді.
Клавдіу

Так, 0 - це число. нуль є відсутність з будь-якого числа.
Майкл Дюрант

7

Чому б вам не почати, задавши питання "чому значення дорівнює NULL?" Це може допомогти вам пояснити, чому розрахунок може бути недійсним.

Якщо ви робили періодичні оновлення, і нове значення не представляло себе (наприклад, помилка мережі), то NULL може означати, що обчислення не може бути виконано, а старе значення відсотка застаріле. Можливо, ви захочете показати символ, який вказує на наявність несвіжих даних, оновлення не відбулося, як очікувалося.

Те ж саме може бути справедливим і для відсутнього старого значення, але я важко розумію, як може бути втрачено старе значення (якщо тільки це не перший розрахунок, або акумулятор загинув і дані були втрачені.) Але ви, можливо, захочете покажіть символ, який також вказує на цю умову.

У будь-якому випадку ви не хочете, щоб це сталося:

введіть тут опис зображення

Джерело зображення


+1. Це відповідь: поясніть, чому значення є нульовим. Якщо ви не можете пояснити це, то у вас є помилка.
MarkJ

5

OldValue=Null ви не знаєте старого значення, тому різниця невідома (нульова)

OldValue=0 Ви знаєте старе значення, воно дорівнює 0, тому різниця - нескінченність (нуль)

Якщо важливо розрізнити ці два, просто збережіть старе значення як PreviousValueі покажіть його десь.


Редагувати, грунтуючись на коментарі нижче:
я б просто попросив його, що він хоче робити у наступних ситуаціях, і показав би йому приклади кожної з них. Потім запитайте його "Яке значення ви хочете відобразити для них?"

Ні в якому разі не робіть це комп’ютерною проблемою .. Це питання бізнесу.


Я не думаю, що мій начальник зрозумів би, що ти щойно сказав :)
OO

+1 за те, що підходити до цього як до бізнес-питання. Шеф, швидше за все, не хвилює реалізацію.
Аллен Гулд

4

Я мав багато успіху з «порожнім».

Для людей, які розуміють основну алгебру (або просту ідею, що ви можете призначити значення символу), уявлення про «порожнє» значення здається досить простим і відмінним від нульового значення.


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

Дійсно, не важливо, чи є ваш начальник програмістом. Питання - концептуальне, а не технічне.

Попросіть його припустити, що ви отримали підвищення. Ваша стара зарплата становила 175 тис., Але нова зарплата невідома. Тоді запитайте у нього - який підвищення відсотка ви отримали?

Якщо він арифметично недієздатний, пройдіть його через процес, поки він не зможе побачити, де пропущене посилання.


3

Я використовую монети фліп. Правда - це голови, помилкові - хвости, і одна рука, накладена на іншу, ховаючи монету, - НУЛЬНА. Якщо ви знаєте, що монета є головами, дуже легко відповісти на питання "що протилежне цій вартості?". Одна рука, що приховує монету, дуже легко показує, що людина може відповісти, якби ви дозволили їм побачити поточне значення, але оскільки ви цього не зробите, вони не можуть дати вам відповідь. Як вони знають, у вас навіть немає монети під рукою!


1

У полі NULL каже, що я не маю уявлення; тут немає даних - його еквівалент порожнього. Нуль (0) говорить, що я знаю, що значення цього поля точно 0, наприклад, ціле число, яке є на менше, ніж число одне.

Наприклад, у мене міг бути аркуш паперу, який я набираю в комп'ютерну систему, яка говорить про те, скільки заборгував кожен клієнт. Клієнт A заборгував 50 доларів, клієнт B заборгував 0 доларів, а замовник C заборгував NULL (????), тому що сума заборгованості C, яку заборгував, була відредагована (хтось намалював чорну лінію над нею та її нечитабельну; або їх була примітка про те, що їх рахунок ще не готовий). Я можу з комфортом сказати, що клієнт B заборгував 0 доларів, і можу з комфортом сказати, що я не знаю, що заборгував клієнт C. Я не хочу стягувати з клієнта C $ 0 (тому що вони можуть заборгувати гроші).


1

Якщо припустити, що ми не потрапляємо на конкретні мови, як-от:

#define NULL 0

Різниця полягає в тому, що 0 - числове значення, де NULL не є. Це як порожня клітинка на аркуші графічного паперу. У комірці може бути "0", але вона також може бути порожньою. Null все ще є цінністю, але ви вважали це особливим. Наприклад, якщо ваші комірки тепер були символами, ви можете використовувати порожню комірку як пробіл, а нульова комірка вже неможлива, якщо ви не призначите або не створите символ для окремого випадку.

Що означає "null", залежить від того, як трактуються дані:

  • Нульові дані можуть означати "ще не надано", і програма зачекає деякий час, перш ніж знову перевірити значення.
  • Дані можуть не мати нульового значення. Це може бути витлумачено строго як ціле число, і не ціле значення буде неможливим.
  • Як правило, в пам'яті адресу 0 інтерпретують як нульову, а значить, її не можна використовувати.

NULL == 0добре працює, коли ви маєте справу з нульовими покажчиками в C et al. Якщо ви намагаєтесь пояснити свою ідею своєму начальнику, який не програмує, показуючи їм код, ви робите це неправильно.
Tullo_x86

1

Я би запустив перевірку NVL, і якщо одним із параметрів є NULL, я б відображав рядок "N / A" (не повертати "0", оскільки це просто не відповідає дійсності!).

Це те, що, з точки зору менеджера, виглядало б більш професійно, ніж відображати значення NULL, який вид виглядає, як у вас є помилка (що, звичайно, ви не робите - але це так, як це виглядає для неінженера) .


Позначте начальника +1 і всіх користувачів не хвилює, що означає "null". Вони хочуть змістовного пояснення значення. Якщо немає старого чи нового значення, то змін не буде.
jqa

1

у нас є старе значення, але не нове значення.

Здається, що в його думці немає нової цінності, це не означає, що це невідомо; це те саме, що і старе значення. Ви можете кодувати це відповідно, не пояснюючи нуль, оскільки, на його думку, це ніколи не буде нульовим.

Замість того, щоб сперечатися з пунктом про NULL, просто переконайтеся, що це не створює інших проблем. Які наслідки мають занадто старі дані? Коли хтось бачить зміну 0%, чи натискає на кнопку паніки? Чи буде це перекосом якийсь аналіз чи агрегати з часом?

Я просто не думаю, що йому потрібен підручник з комп'ютерного програмування, але було б добре, якби він знав, що таке нуль, і натомість задав правильне питання.


1

Якщо значення old valuenull, результат рівнянь має бути справедливим. Це тому, що null не є числом, це означає невідоме значення. Тому розрахунок не може тривати.

Звичайно, ваше рівняння також виходить з ладу, якщо old value = 0ви не можете розділити на нуль.

Зазвичай ви керуєтесь цими речами викладом справи, який подасть вам шлях того, що ви хочете показати. Тож якщо ви хочете, щоб результат показав як нульовий, коли ви не можете обчислити (як з нулем або нулем, тоді ви зробите заяву про щось подібне

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

З точки зору користувачів 0 і NULL у випадку старого значення не дорівнюватимуть різниці (наприклад, якщо мені доведеться показувати значення в текстовому полі). У відсотковій зміні відсутність значення може означати те саме, що нуль або нуль, правда?
ОО

У відсотках зміна нуля означає конкретно, що не було змін (старі та нові значення були абсолютно однакові), нульовий означає, що відбулися зміни, але відсоток не можна визначити. Ось чому ви, ймовірно, не хочете показувати нуль як результат, оскільки він вводить в оману.
HLGEM

1

Деякі великі дискусії з аналогій для пояснення механічних аспектів нульового символу порівняно з іншими значеннями; однак, суть цього питання, можливо, з точки зору менеджера щодо адекватного вираження результатів у користувальницькому інтерфейсі, що представляє змістовні межі формули, що змінилася без змін, застосованої до їх конкретної проблеми, я можу відповісти більш конкретно, я вважаю.

Що стосується змінених на форумі відсотків, потрібно представити дві речі: коли спочатку вимірюється щось і коли для певного аспекту нічого не вимірюється.

Коли щось спочатку вимірюється (oldValue === NULL), зміна відсотка не піддається застосуванню; і можна / слід чітко зазначити, що це початкове вимірювання для цього вимірювального циклу.

Коли нічого не вимірюється (newValue === NULL), фактична результуюча зміна відсотка - це фактично значення нуля (якщо вважати, що не було значення в попередньому циклі). Нуль, як правило, є відповідною формулою у цьому випадку. У цьому останньому циклі не було вимірів, і, отже, не було виміряних змін. Це не повинно означати, що воно не змінилося, лише те, що стосовно цього аспекту нічого не вимірювалося, не фіксувалося та не повідомлялося.


0

Безумовно, вони розуміють концепцію додавання "N / A" у форму, коли вони означають "недоступно". Наприклад, щоб відповісти на питання: "Скільки років Бенджаміну Франклін?" відповіді 0 та N / A явно різні (і останній правильний). Так само відповіді 0 і NULL різні.


0
  • NULL - відсутність значення.
  • -Zero- це значення, і це значення -Zero-.

Якби мені довелося комусь пояснити ці поняття, я намалював би два поля.

  • Порожнє поле означатиме NULL.
  • Коробка з цифрою -Зеро- в ній означатиме -Зеро-.

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 змінних для вас, ви будете використовувати все, що вже було . Це може призвести до переливів, пошкодження стека або інших неприємних побічних ефектів.

Якщо мова робить відстежувати NULL змінних, то він буде мати заявлений випадок для обробки цього. IE ставиться до NULL як до нуля, кидає виняток, трактує як nop тощо.

Щоб продемонструвати своєму начальнику, знайдіть кілька паперів використаного паперу.

  1. Візьміть 2 склянки і білу паличку.
  2. Пофарбуйте частину сторінки та запишіть нуль
  3. Поставте склянку над цим (це вар а)
  4. Поставте келих на інший розділ сторінки (це var b)

-1

Судячи з різноманітності відповідей на це питання, можна зробити висновок про те, що ми вже знаємо: нульове може означати багато речей.

Це означає, що дані є:

  • невідомо, що невідомо,
  • як відомо, невідомо,
  • недійсний (наприклад, похибка вимірювання),
  • недоступний (наприклад, безпечний),
  • як відомо, але відоме, але не має значення для поточної обробки даних
  • дані нескінченні (часто використовуються в базах даних)
  • певно, ще 10 речей, про які я не думав

З цієї та багатьох інших причин часто корисно визначити структуру даних, яка інкапсулює значення нульового значення (наприклад, необов'язковий клас).


-2

Людина, яка зробила це, не має почуття гумору. FWIW Я сам архітектор.

Нуль - порожнеча. За легендою, існує 17 ароматів (можливих значень) Null, включаючи "Я не знаю", "Вони не говорили" і "хтось зламав це". Ніхто не знає, чому, крім DBA та архітекторів, які знущаються з темних кімнат заднього простого програміста. Вони ввічливо посміхаються начальству і глибоко турбують язиками над неможливо складною мудрістю, яка повинна бути такою, і це є глибоко важливим, але не дуже чітким - адже начальники дають важливу роботу DBA та архітектору. Чековий чек. Навіть так, Нуллс ніколи не розповідає своїх секретів. Вони - чорні діри порожніх. Одна нуль ніколи не дорівнює іншій нулі, тому що кожна порожнеча порожня рівності і відмовляється визнати, що вона може бути не всім порожнім. Звичайно, це вигадка, оскільки жоден поважаючий себе нуль ніколи насправді не міг визнати. Іноді нулі всмоктують величезну кількість реальних даних у свої (). Це називається помилка, але насправді це просто порожнеча розуму програміста, який забуває про нулі. Отже, ви бачите, що вони іноді розмножуються. Але як і чому завжди швидко забувається. () іноді є ознакою нуля або його двоюрідного брата нулем, але, як це не парадоксально, рідко помилка.

Нуль - це певна кількість чогось. Нулі набагато щасливіші, ніж нулі. Нулі просто ледачі і не додають багато результату.

Для нудної, дуже старої точної відповіді Null - це представлення "відсутньої інформації та непридатної інформації" EF Codd, творця SQL.

Кодд також винайшов 3-ю звичайну форму, яка застосовується до свідомості молодих вчених-комп'ютерів як форма попередніх тортур. Після освоєння це повністю ігнорується. Подібні речі трапляються при введенні об'єктно-орієнтованого дизайну. І ми ніколи не раді залишити це в спокої, тому разом із цим виникає невідповідність імпедансу, щоб додати до жартівливої ​​сутички.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.