Come posso spiegare la differenza tra NULL e zero?

59

Lavorare su un problema che utilizza la formula di modifica percentuale:

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

Come spiegherei la differenza se new value or old value = NULL , piuttosto che 0 a qualcuno che potrebbe non essere un programmatore?

Il mio capo si chiede perché c'è una stringa vuota nel TextBox piuttosto che un valore, perché abbiamo il vecchio valore, ma non il nuovo valore.

    
posta O.O 21.04.2015 - 10:48
fonte

24 risposte

100

Per spiegare a un capo la differenza tra "zero" e "nulla":

"Zero" è un valore. È la quantità unica e conosciuta di zero, che è significativa nell'aritmetica e nell'altra matematica.

"Null" è un non valore. È un "segnaposto" per un valore di dati che non è noto o non specificato. È significativo solo in questo contesto; le operazioni matematiche non possono essere eseguite su null (il risultato di qualsiasi operazione di questo tipo non è definito, e quindi anche generalmente rappresentato come null).

Ad esempio, come nei commenti: "Qual è il tuo reddito annuale?" è una domanda che richiede una risposta numerica. "0" è una risposta perfettamente valida per qualcuno che non lavora e non ha redditi da investimenti. Se l'utente non inserisce alcun valore, non necessariamente guadagna denaro; semplicemente non volevano dire al tuo software quanto (o poco) fanno. È uno sconosciuto, non specificato; pertanto, per consentire al software di continuare, si specifica il segnaposto "null" per quel campo di dati all'interno del software. Ciò è tecnicamente valido dal punto di vista dei dati; se è valido a livello aziendale dipende dalla necessità o meno di un valore numerico effettivo (pari a zero) per eseguire un'operazione matematica (come il calcolo delle imposte o il confronto con le soglie che determinano i benefici).

Nei computer, praticamente qualsiasi operazione su una variabile contenente null risulterà in null o in una condizione di errore, poiché poiché uno dei valori della variabile non è noto, il risultato dell'espressione non può essere conosciuto. L'equivalente di eseguire matematica su null sarebbe se ti chiedessi "Qual è il cinque più il numero a cui sto pensando in questo momento?". È impossibile per te dare una risposta definitiva perché non conosci il numero a cui sto pensando. Un'operazione su zero, ad eccezione della sua divisione, è generalmente valida e restituirà un altro valore noto e univoco.

    
risposta data 24.01.2013 - 18:29
fonte
171

Il parlare in modo diretto è sempre difficile ...

Zero è un numero in modo che tu possa fare qualcosa con esso.

Null è un unicorno. Non esiste quindi non puoi fare nulla con esso.

    
risposta data 13.02.2012 - 21:08
fonte
38

Basta riformulare le equazioni in frasi:

"What is the percentage change if you start with an unknown value and you end up with 150?"

e

"What is the percentage change if you start with 85 and you end up with some unknown value?"

Ovviamente, la risposta ad entrambi è "Non può essere calcolata, perché manca uno dei pezzi critici del calcolo." Questa è l'essenza di "null".

Dovrebbe essere facile quindi capire le frasi equivalenti con zero, e vedere come sono fondamentalmente differenti:

"What is the percentage change if you start with an 0 and you end up with 150?"

e

"What is the percentage change if you start with 85 and you end up with 0?"

Anche se le risposte potrebbero non avere molto senso (con gli zeri), almeno può essere calcolato . Con null, il calcolo non è nemmeno possibile .

    
risposta data 13.02.2012 - 23:03
fonte
20

Quando parli con il tuo capo, usa solo 0 per zero e ? per null. Cattura correttamente che è un segnaposto per qualcosa ma che non sai di cosa si tratta.

    
risposta data 13.02.2012 - 22:18
fonte
13

Che ne dici di questo:

  • 0 è la risposta a "quanto liquido c'è in una bottiglia vuota?".
  • NULL è la risposta a "qual è il contenuto di una bottiglia vuota?".

O se immagini un uomo senza figli:

  • il numero dei suoi figli è 0
  • il figlio maggiore è NULL

La differenza fondamentale è che 0 riguarda la quantità misurabile, mentre NULL riguarda l'esistenza. Essendo una quantità, 0 rappresenta qualcosa , cioè una quantità, ovvero 0 , molto simile a 0.000000001 rappresenta una quantità (una che nei problemi della vita di tutti i giorni è in effetti indistintamente vicina a %codice%). Al contrario, 0 rappresenta niente . Infatti non c'è nulla vicino a NULL . Il valore di qualsiasi variabile (ed espressioni) è NULL o qualcosa.

    
risposta data 13.02.2012 - 21:18
fonte
7

È così che lo spieghi sempre con successo:

0 è il numero 0.

NULL è nirvana, niente, nada, niente, non esistenza, assenza.

Le operazioni aritmetiche definite su NULL producono sempre NULL come risultato.

... ha funzionato per me finora.

    
risposta data 13.02.2012 - 21:15
fonte
7

Perché non dovresti iniziare ponendo la domanda "perché il valore è uguale a NULL?" Questo potrebbe aiutarti a spiegare perché un calcolo potrebbe non essere valido.

Se si eseguivano aggiornamenti periodici e il nuovo valore non si presentava da solo (errore di rete ad esempio), allora NULL potrebbe indicare che il calcolo non può essere eseguito e il vecchio valore percentuale è scaduto. Potresti voler mostrare un simbolo che indica che hai dati non aggiornati, l'aggiornamento non si è verificato come previsto.

La stessa cosa potrebbe essere vera per un vecchio valore mancante, ma ho difficoltà a capire come un vecchio valore potrebbe essere perso (a meno che questo non sia il primo calcolo, o la batteria è morta e i dati sono stati persi). Ma tu potrebbe voler mostrare un simbolo che indica anche questa condizione.

In ogni caso non vuoi che ciò accada:

Fonte immagine

    
risposta data 13.02.2012 - 22:27
fonte
5

OldValue=Null non conosci il valore Vecchio, quindi Differenza è Sconosciuto (Null)

OldValue=0 Conosci il valore Vecchio, è 0, quindi la differenza è Infinito (Null)

Se è importante distinguere tra questi due, è sufficiente memorizzare il valore Vecchio come PreviousValue e visualizzarlo da qualche parte.

Modifica in base al commento seguente:
Vorrei solo chiedergli cosa vuole fare nelle seguenti situazioni e mostrargli esempi di ognuno di questi. Quindi chiedigli "Che valore vuoi visualizzare per questi?"

Non creare in alcun modo un problema informatico. È una questione commerciale.

    
risposta data 13.02.2012 - 21:00
fonte
4

Ho avuto molto successo con "vuoto".

Con persone che capiscono l'algebra di base (o la semplice idea che è possibile assegnare un valore a un simbolo), l'idea di un valore "vuoto" sembra piuttosto semplice e distinta da un valore zero.

    
risposta data 13.02.2012 - 21:00
fonte
4

NULL non è un valore, è una mancanza di uno. Zero è ancora un valore. (anche se può essere utilizzato nei casi in cui non può essere completamente valutato.

Per analogia (un buon modo di spiegare a non teckies;

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

Anche se in questo caso i due potrebbero avere lo stesso valore (a seconda del tuo langage) sono concettualmente molto diversi

    
risposta data 13.02.2012 - 21:03
fonte
4

In realtà non è rilevante se il tuo capo è un programmatore. Il problema è concettuale e non tecnico.

Chiedigli di presumere che hai un aumento. Il tuo vecchio stipendio era di 175.000, ma il tuo nuovo stipendio non è noto. Poi chiedigli: quale aumento di percentuale hai ricevuto?

Se è aritmeticamente disattivato, seguilo durante il processo fino a quando non può vedere dove si trova il collegamento mancante.

    
risposta data 13.02.2012 - 22:31
fonte
3

Uso il lancio della moneta. Vere sono teste, false code, e una mano a coppa sopra l'altra che nasconde la moneta è NULL. Se sai che la moneta è la testa, è molto facile rispondere alla domanda "qual è l'opposto di questo valore?". Una mano che nasconde la moneta mostra molto facilmente che la persona potrebbe rispondere se gli permetteresti di vedere il valore corrente, ma dal momento che non lo farai, non potranno darti una risposta. Per quello che sanno, non hai nemmeno una moneta sotto mano!

    
risposta data 13.02.2012 - 22:16
fonte
1

we have the old value, but not the new value.

Sembra nella sua mente, non avere un nuovo valore non significa che sia sconosciuto; è lo stesso del vecchio valore. Puoi codificarlo di conseguenza senza spiegare null perché nella sua mente, non è mai nullo.

Invece di discutere il punto sui NULL, assicurati solo che questo non crei altri problemi. Quali sono le conseguenze di avere dati troppo vecchi? Quando qualcuno vede una variazione dello 0%, colpisce il pulsante di panico? Questo obliquerà qualsiasi analisi o aggregazione nel tempo?

Semplicemente non penso che abbia bisogno di un tutorial di programmazione per computer, ma sarebbe bello se sapesse cosa fosse un null e invece ha posto la domanda giusta.

    
risposta data 13.02.2012 - 23:27
fonte
1

Se old value è nullo il risultato delle equazioni dovrebbe essere giustamente nullo. Questo perché null non è un numero, significa valore sconosciuto. Pertanto il calcolo non può procedere.

Ovviamente anche la tua equazione fallisce se old value = 0 come non puoi dividere per zero.

In genere gestisci queste cose con una dichiarazione del caso che ti porterà nel percorso di ciò che vuoi mostrare. Quindi se vuoi che il risultato sia visualizzato come nullo quando non puoi calcolare (come con un nullo o uno zero, allora dovresti fare un'istruzione case come

case when [old value] = 0 then null 
else 100 * (([old value] - [new value]) /[old value]) 
end
    
risposta data 14.02.2012 - 14:54
fonte
1

Qualche discussione sulle analogie per spiegare gli aspetti meccanici di un simbolo nullo rispetto ad altri valori; tuttavia, il punto cruciale di questa domanda, forse dal punto di vista del manager, nel esprimere adeguatamente i risultati nell'interfaccia utente, che rappresenta i limiti significativi della formula modificata modificata applicata al loro problema specifico, può essere risolta in modo più specifico.

Nel caso della percentuale cambiata forumula, devono essere rappresentate due cose: quando qualcosa viene misurato per la prima volta e quando nulla viene misurato per un particolare aspetto.

Quando qualcosa viene misurato per la prima volta (oldValue === NULL), la variazione percentuale non è applicabile; e potrebbe / dovrebbe essere esplicitamente notato che è la misura iniziale per quel ciclo di misurazione.

Quando non viene misurato nulla (newValue === NULL), la variazione percentuale effettiva effettiva è in realtà il valore di zero (assumendo non nulla nel ciclo precedente). Zero è generalmente la risposta appropriata alla formula in questo caso. Non ci sono state misurazioni in questo ciclo più recente e quindi nessun cambiamento misurato. Ciò non dovrebbe implicare che non è cambiato, solo che nulla è stato misurato, registrato o comunicato in relazione a tale aspetto.

    
risposta data 14.02.2012 - 21:21
fonte
1

In un campo, NULL dice che non ne ho idea; non ci sono dati qui - il suo equivalente di vuoto. Zero (0) dice che so che il valore di questo campo è esattamente 0, ad esempio il numero intero che è inferiore al numero uno.

Ad esempio, potrei avere un foglio di carta che sto digitando nel sistema informatico che dice quanto deve ogni cliente. Il cliente A deve $ 50, il cliente B deve $ 0, e il cliente C deve NULL (????), perché la cifra cliente C deve numero è stata redatta (qualcuno ha tracciato una linea nera sopra e illeggibile, oppure la loro era una nota che diceva che il loro conto non è ancora pronto). Posso tranquillamente dire che il cliente B deve $ 0, e posso tranquillamente dire che non so quale cliente debba. Non voglio addebitare ai clienti C $ 0 (perché potrebbero avere dei soldi).

    
risposta data 13.02.2012 - 22:24
fonte
1

Supponendo che non stiamo entrando in argomenti specifici della lingua come:

#define NULL 0

La differenza è che 0 è un valore numerico in cui NULL non lo è. È come una cella vuota su un foglio di carta millimetrata. Una cella può avere uno "0", ma può anche essere vuota. Null è ancora un valore, ma lo hai ritenuto speciale. Ad esempio se le tue celle erano ora caratteri, puoi usare la cella vuota come spazio e una cella nulla non è più possibile a meno che tu non definisca o crei un personaggio come caso speciale.

Quale valore nullo dipende da come vengono interpretati i dati:

  • I dati null possono significare "non ancora forniti" e un programma attenderà un po 'prima di ricontrollare il valore.
  • I dati potrebbero non essere in grado di avere un valore nullo. Può essere interpretato rigorosamente come un numero intero e un valore non intero sarebbe impossibile.
  • Comunemente in memoria, l'indirizzo 0 viene interpretato come null, il che significa che non può essere utilizzato.
risposta data 13.02.2012 - 23:01
fonte
1

Avrei eseguito il controllo NVL e se uno dei parametri è NULL, visualizzerei la stringa "N / A" (non restituire "0" poiché non è vero!).

Questo è qualcosa che, da un punto di vista manageriale, sembrerebbe più professionale, mostrando quindi un valore NULL che sembra che tu abbia un bug (che ovviamente non lo fai), ma questo è il modo in cui guarda ad un non -engineer).

    
risposta data 13.02.2012 - 23:06
fonte
0

Certamente capiscono il concetto di mettere "N / A" su un modulo quando significano "non disponibile". Ad esempio, per rispondere alla domanda, "Quanti anni ha Benjamin Franklin?" le risposte 0 e N / A sono ovviamente diverse (e l'ultima è corretta). Allo stesso modo le risposte 0 e NULL sono diverse.

    
risposta data 14.02.2012 - 12:45
fonte
0
  • NULL è l'assenza di un valore.
  • -Zero- è un valore e tale valore è -Zero -.

Se dovessi spiegare questi concetti a qualcuno, disegnerei due scatole.

  • Una casella vuota rappresenterebbe NULL.
  • Una casella con un numero -Zero- in essa rappresenterebbe -Zero-.
risposta data 14.02.2012 - 18:29
fonte
0

La differenza tra 0 e null è come la differenza tra avere un conto bancario con un saldo 0 e non avere un conto bancario.

    
risposta data 14.02.2012 - 19:00
fonte
-1

Questo è meglio spiegato con i puntatori.

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

Per questo motivo, se la tua lingua non tiene traccia delle variabili NULL per te, allora userai ciò che era già lì . Questo può portare a trabocchi, stack di corruzioni o altri cattivi effetti collaterali.

Se la lingua fa tiene traccia delle variabili NULL, allora avrà un caso dichiarato per gestirlo. OSSIA tratta NULL come zero, genera eccezione, tratta come nop, ecc.

Per dimostrare per il tuo capo, prendi qualche pezzo di carta usata.

  1. Prendi 2 bicchieri e un bastone bianco.
  2. White out una sezione della pagina e scrivi uno zero
  3. Metti un bicchiere sopra (questo è var a)
  4. Metti un bicchiere su un'altra sezione della pagina (questa è var b)
risposta data 13.02.2012 - 22:45
fonte
-1

A giudicare dalla varietà di risposte a questa domanda, si può concludere ciò che già sappiamo: null può significare molte cose.

O significa che i dati sono:

  • non noto per essere conosciuto,
  • noto per non essere noto,
  • non valido (ad esempio errore di misurazione),
  • non accessibile (ad es. sicurezza),
  • noto per essere noto ma irrilevante per l'attuale elaborazione dei dati
  • i dati sono infiniti (spesso usati nei database)
  • probabilmente altre 10 cose a cui non avevo pensato

Per questo, e molti altri motivi, è spesso utile definire una struttura dati che incapsula il significato del valore nullo (ad esempio una classe opzionale).

    
risposta data 14.02.2012 - 12:25
fonte
-2

La persona che ha preso questo non ha senso dell'umorismo. FWIW Sono un architetto anch'io.

Null è vuoto. Secondo la leggenda ci sono 17 sapori (possibili significati) di Null tra cui "Non lo so", "Non hanno detto" e "qualcuno ha rotto questo". Nessuno sa perché, tranne gli amministratori delegati e gli architetti che si accalcano da stanze oscure ai semplici programmatori. Sorridono educatamente ai capi e scuotono la lingua con profonda preoccupazione per la saggezza impossibile che deve essere così, ed è profondamente importante ma non molto chiaro - perché i boss offrono prestazioni importanti al DBA e all'Arch. Un controllo di paga. Anche così i Null non dicono mai i loro segreti. Sono buchi neri vuoti. Un nullo non equivale mai a un altro nullo perché ogni vuoto è vuoto di uguaglianza e si rifiuta di ammettere che potrebbe non essere tutto il vuoto che c'è. Questo naturalmente è una congettura perché nessun nullo che si rispetti potrebbe mai ammetterlo. A volte i null assorbono grandi quantità di dati reali nella loro (). Questo è chiamato bug ma in realtà è solo il vuoto della mente del programmatore che dimentica i null. Quindi vedi che a volte si riproducono. Ma come o perché è sempre presto dimenticato. () a volte è un segno di null o suo cugino nil ma paradossalmente di rado un bug.

Zero è una quantità definita di qualcosa. Gli zeri sono molto più felici dei null. Gli zeri sono semplicemente pigri e non aggiungono molto al risultato.

Per la noiosa, risposta molto vecchia e accurata Null è una rappresentazione di "informazioni mancanti e informazioni inapplicabili" E.F. Codd, creatore di SQL.

Codd ha anche inventato la terza forma normale che viene applicata alle menti dei giovani scienziati informatici come una forma di tortura preliminare. Una volta controllato, viene completamente ignorato. Cose simili accadono quando viene introdotto l'Object Oriented Design. E non siamo mai contenti di lasciarlo da solo, quindi è arrivato il mismatch di impedenza da aggiungere alla mischia amorosa.

    
risposta data 15.02.2012 - 04:05
fonte

Leggi altre domande sui tag