NULLとゼロの違いを説明するにはどうすればよいですか?


59

パーセント変化式を使用する問題に取り組んでいます:

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

プログラマーではないかもしれない誰かにではnew value or old value = NULLなく、ifの違いをどのように説明し0ますか?

上司は、値ではなく空の文字列がTextBoxにある理由を疑問に思っています。これは、新しい値ではなく古い値があるためです。


11
「違いをどのように説明しますか?」どの言語で?一部の言語は例外をスロー(または発生)します。いくつかはNULL結果を返します。NULLの実装方法の詳細に依存するものもあります。もっと具体的にする必要があります。
S.Lott

29
テキストボックスを変更して、空の文字列の代わりに「データは利用できません」と言います。
クレイグ

3
@ZJR-メッセージをボックスの下に赤で表示します。ポイントは、「NULL」または空の文字列は、オブジェクトのメモリアドレスとほぼ同じくらいUIで使用できます。
12

10
類推、0度の温度、および温度無読み取ることによって、さまざまな状況があります...
NWS

4
私はそれが保護されていると答えることはできませんが、それは値ではなく状態であるNULLといつも説明しています-それはあなたが値を知らないことを意味します。SQLの場合、通常、パーティの類推を使用して説明します。
JNK

回答:


101

「ゼロ」と「ヌル」の違いを上司に説明するには:

「ゼロ」は値です。これは、一意の既知のゼロの量であり、算術およびその他の数学で意味があります。

「ヌル」は値ではありません。これは、不明または指定されていないデータ値の「プレースホルダー」です。このコンテキストでのみ意味があります。数学演算はヌルに対して実行できません(そのような演算の結果は未定義であるため、一般にヌルとして表されます)。

たとえば、コメントのように:「あなたの年間収入は?」数値の回答が必要な質問です。「0」は、仕事をしておらず、投資収入がない人にとって完全に有効な答えです。ユーザーが値をまったく入力しなければ、必ずしもお金をmakeけません。彼らはあなたのソフトウェアにどれだけ(または少し)作るかを伝えたくありませんでした。これは不明であり、指定されていません。したがって、ソフトウェアの続行を許可するには、ソフトウェア内のそのデータフィールドに「null」プレースホルダーを指定します。これは、データの観点から技術的に有効です。ビジネスレベルで有効であるかどうかは、数学的な操作(税の計算、利益を決定するしきい値との比較など)を実行するために実際の数値(ゼロであっても)が必要かどうかによって異なります。

コンピュータでは、変数の値の1つが不明であるため、式の結果を知ることができないため、nullを含む変数に対する操作は事実上nullまたはエラー状態になります。nullで数学を実行するのと同じことは、「5に現在考えている数を足したものは何ですか?」私が考えている数字がわからないので、明確な答えを出すことは不可能です。ゼロでの演算は、それで除算する場合を除き、通常有効であり、既知の一意の別の値を返します。


37
「プレースホルダー」は役立つ説明です。アンケートを実施して「あなたは何歳ですか?」と尋ねたときに、誰かがその質問をスキップした場合、その答えを0として表すべきではありません。正しい表現はになりますNULL
ネイサンロング

したがって、NULLは未定義のデータ型を持つメモリ内のプレースホルダーであると簡単に言うことができます。
マクスード

1
@Maxood-プログラミング言語に依存します。(?構文を使用して)nullを許可され、既知の整数値を持たないようにnullに設定される整数変数を検討します。予想されるタイプは既知であるため、定義されていないといっても、100%正しくないと考えるかもしれません。nullには値や型がないと言うのは正しいことです。個人的には、使用するコンテキストと言語に応じて、nullまたはNULL型は定義されていません。C#では、オブジェクトへの参照が未定義であることを単に意味します。
ラムハウンド

NULL明示的なあるLACKそれは単一の孤独である、プレースホルダではなく、データのないデータ。

「プレースホルダ」という用語は、最初に投稿されてからこの回答に含まれていましたが、今は変更しません。この質問にぶつかった編集は、説明の他のポイントを明確にすることでした。ほとんどの言語で実装されているように、実際には「プレースホルダー」です。メモリポインタによって「参照」されて、それらが有用なものを指していないことを示すという明確な目的のために、プログラムの構造内に存在するメモリのアドレス0の予約場所。OPが上司に伝える必要がある以上です。
キース

172

上司はいつも厳しい...

ゼロは数字なので、それを使っていろいろなことができます。

ヌルはユニコーンです。存在しないので、何もできません。


45
ユニコーンの+1!追加する必要があります:非常に良い説明。
BЈовић

14
クエリの入力を開始する必要があります:NVL(somefield,'UNICORN');)
FrustratedWithFormsDesigner

11
それから、ボスは「なぜそれを0にしないのでそれで何かをすることができますか?ヌルの音は役に立たない」と尋ねるかもしれません。
-AlbeyAmakiir

26
@AlbeyAmakiir-そのようなボスに対する正しい応答は、「私たちが知らないことを知っているふりをしている間、なぜそれを100万人にしないのですか?それは素晴らしく、大きいです」です。
ネイサンロング

12
これが90以上の賛成票を得たとは信じられません。私はすべての答えにユニコーンを入れ始めます。
モロン

38

方程式を文に言い換えるだけです:

未知の値から始めて150になった場合の変化率は何ですか?」

そして

「85で始まり、未知の値で終わる場合の変化率は何ですか?」

もちろん、両方の答えは「計算の重要な部分の1つが欠落しているため、計算できません」です。それが「ヌル」の本質です。

その場合、ゼロを含む同等の文を理解し、それらが根本的に異なることを確認するのは簡単です。

「0から始めて150で終わる場合の変化率は何ですか?」

そして

「85で始まり、0で終わる場合の変化率は何ですか?」

答えはあまり意味をなさないかもしれませんが(ゼロの場合)、少なくとも計算できます。nullの場合、計算は不可能です。


2
+1「不明」は間違いなく素晴らしい説明であり、文章で簡単に説明できます。
スコットリッピー

@ScottRippey- パーセンテージunknownの場合、NULL実際には数値(パーセンテージ)やその他のパーセンテージ値が存在しないため、値は単に存在しないだけではないと主張します。
ラムハウンド

2
@Ramhound元の質問の文脈で私がやろうとしていたものは次のとおりです。「不明」はKiethSの答えの「プレースホルダー」を表します。これは素晴らしい説明だと思います。プログラマーではない上司にとって、それはどこかに価値があるかもしれないことを意味しますが、私たちにはそれがありません(データベース、システム、フォームなどに)。値はありますか?何らかの情報を知るのに十分な情報がありません。データがありません。それは、何も持たないこととは微妙に異なる意味であり、持つ価値はないと推測します。ディスカッションのコンテキストに応じて、いずれかの説明が正しい場合があります。
エリックキング

20

上司と話をするときは0、ゼロと?ヌルに使用します。それは何かのプレースホルダーであるが、それが何であるか知らないことを正しくキャプチャします。


?素晴らしく、シンプルであり、素人向けにコンセプトを明確に伝えます。
-nelaaro

12

これはどう:

  • 0 「空のボトルにはどれくらいの液体がありますか?」に対する答えです。
  • NULL 「空のボトルの内容は何ですか?」に対する答えは何ですか?

または、子供のいない男性を想像すると:

  • 彼の子供の数は 0
  • 彼の一番上の子は NULL

基本的な違いは、0測定可能な量NULLに関することですが、存在に関することです。量であることは、何か、すなわち量を0表します。つまり、量を表すの0とよく似ています0.000000001(実際、毎日の生活の問題で見分けがつかないほど近い0)。それとは対照的に、何もNULL表さない。実際、に近いものはありませんNULL。任意の変数(および式)値は、いずれかNULLまたは何かです。


8

それは私がいつもうまく説明する方法です:

0は数値0です。

NULLは、nirvana、nothing、nada、niente、non-existence、欠席です。

NULLで定義された算術演算は、常に結果としてNULLを生成します。

...これまでのところ私のために働いた。


8
NULLは苦しみの完全な停止ですか?わあ!私は自分のコードでそれ以上を使用する必要があります。
クラウディウ

はい、0は数字です。nullはある不在任意の数。
マイケルデュラント

7

「なぜ値がNULLに等しいのか」という質問から始めないのはなぜですか。これは、計算が無効になる理由を説明するのに役立ちます。

定期的な更新を行っていて、新しい値が表示されなかった場合(たとえば、ネットワークエラー)、NULLは計算が実行できず、古いパーセント値が古いことを意味する場合があります。失効したデータがあることを示す記号を表示したい場合がありますが、更新は期待どおりに行われませんでした。

同じことが古い値が欠落している場合にも当てはまりますが、古い値がどのように失われるかを理解するのに苦労します(これが最初の計算であるか、バッテリーが切れてデータが失われた場合を除きます)。この状態も示す記号を表示します。

いずれにしても、あなたはこれが起こることを望まない:

ここに画像の説明を入力してください

画像ソース


+1。これが答えです。値がnullである理由を説明してください。説明できない場合は、バグがあります。
-MarkJ

5

OldValue=Null 古い値がわからないため、差は不明です(Null)

OldValue=0 古い値を知っている、それは0なので、差は無限(Null)です

これら2つを区別することが重要な場合は、Oldの値を保存して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

この場合、2つは同じ値(言語によって異なります)ですが、概念的には非常に異なります


4

本当に上司がプログラマーかどうかは関係ありません。この問題は概念的なものであり、技術的なものではありません。

あなたにレイズがあったと推測するように彼に頼みます。古い給与は175kでしたが、新しい給与は不明です。それから彼に聞いてください-あなたは何パーセントの昇給を受けましたか?

算術的に無効になっている場合は、行方不明のリンクがどこにあるかがわかるまで、プロセスを説明します。


3

コインフリップを使用します。真は頭であり、偽は尾であり、コインを隠している片方の手がもう片方の上にひっかかっています。コインが頭であることがわかっている場合、「この値の反対は何ですか?」という質問に答えることは非常に簡単です。コインを隠す一つの手は人がいることを非常に簡単に示している可能性がありますが、それらは現在の値を見てみましょうと思いますが、あなたはしないので、彼らはあなたに答えを与えることができない場合に答えます。彼らが知っているすべてのために、あなたはあなたの手の下にコインさえ持っていません!


1

フィールドでは、NULLはわからないことを示します。ここにはデータがありません-空白に相当します。ゼロ(0)は、このフィールドの値が正確に0であることがわかっていることを示します。たとえば、1よりも1小さい整数です。

たとえば、各顧客が負っている金額を示すコンピューターシステムに入力している紙を1枚持っていることができます。顧客Aが50ドル、顧客Bが0ドル、顧客CがNULL(????)を負っています。これは、顧客Cが支払った金額が編集された(誰かがその上に黒い線を引いて読めなかったため、または、彼らの請求書はまだ準備ができていません)。私は、顧客Bが0ドルを借りていると安心して言うことができ、顧客Cが何を負っているのかわからないと言うことができます。顧客Cに$ 0を請求したくありません(お金を借りている可能性があるため)。


1

次のような言語固有のものには入らないと仮定します。

#define NULL 0

違いは、0はNULLではない数値であることです。グラフ用紙上の空のセルのようなものです。セルには「0」を含めることができますが、空にすることもできます。Nullは依然として値ですが、あなたはそれを特別とみなしました。たとえば、セルが文字になった場合、空のセルをスペースとして使用でき、特殊なケースとして文字を指定または作成しない限り、ヌルセルは使用できなくなります。

nullの意味は、データの解釈方法によって異なります。

  • NULLデータは「まだ提供されていない」ことを意味する場合があり、プログラムは値を再度チェックする前にしばらく待機します。
  • データはヌル値を持つことができない場合があります。厳密に整数として解釈される場合があり、整数以外の値は不可能です。
  • 通常、メモリでは、アドレス0はヌルとして解釈されます。つまり、使用できません。

NULL == 0Cなどでヌルポインターを処理している場合は正常に動作します。プログラマーでない上司にコードを見せてアイデアを説明しようとしているのなら、それは間違っています。
Tullo_x86

1

NVLチェックを実行し、パラメータの1つがNULLの場合、文字列「N / A」を表示します(「0」は返さないでください)。

これは、マネージャーの観点からすると、バグがあるように見えるNULL値を表示するよりもプロフェッショナルに見えるものです(もちろん、そうではありません-しかし、それはエンジニア以外の人には見えます) 。


上司を+1すると、すべてのユーザーはnullの意味を気にしません。彼らは価値の意味のある説明を求めています。古い値または新しい値がない場合、変更はありません。
jqa

1

古い値はありますが、新しい値はありません。

彼の心の中にあるように思えますが、新しい値を持っていなくても、それが未知であることを意味しません。古い値と同じです。彼の頭の中では決してnullではないので、nullを説明することなくそれに応じてコーディングできます。

NULLについて議論する代わりに、これが他の問題を引き起こさないことを確認してください。データが古すぎることの影響は何ですか?誰かが0%の変化を見ると、彼らはパニックボタンを押しますか?これにより、分析や集計が時間の経過とともに歪んでいきますか?

彼はコンピュータープログラミングのチュートリアルが必要だとは思わないが、nullが何であるかを知っていて、代わりに正しい質問をするといいと思う。


1

old valueがnullの場合、方程式の結果は当然nullになります。これは、nullは数値ではなく、未知の値を意味するためです。したがって、計算を続行できません。

もちろん、old value = 0ゼロで除算できない場合、方程式も失敗します。

通常、これらの処理は、表示するもののパスを取得するcaseステートメントで処理します。そのため、計算できないときに結果をnullとして表示する場合(nullまたはゼロのように、次のようなcase文を実行します)

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

ユーザーの観点から見ると、古い値の場合の0とNULLは違いとは見なされません(たとえば、テキストボックスに値を表示する必要がある場合)。変化率では、値を持たないことはヌルまたはゼロと同じことを意味する可能性がありますよね?
OO

パーセント変化ゼロでは、特に変化がなかったことを意味します(古い値と新しい値はまったく同じでした)。ヌルは変化があったことを意味しますが、パーセンテージは決定できません。これが、おそらく誤解を招く結果としてゼロを表示したくない理由です。
HLGEM

1

ヌルシンボルの機械的な側面を他の値と比較して説明するための類推に関するいくつかの素晴らしい議論。しかし、UIで結果を適切に表現する上で、おそらく特定の問題に適用される変更された式の意味のある制限を表すマネージャーの観点から、この質問の核心はより具体的に答えられると思います。

フォーラムが変更された割合の場合、2つのことを表す必要があります。最初に何かを測定するときと、特定の側面について何も測定しないときです。

何かが最初に測定されたとき(oldValue === NULL)、パーセンテージの変更は適用されません。そして、それがその測定サイクルの最初の測定であることを明示的に留意する/すべきです。

何も測定されていない場合(newValue === NULL)、実際の結果の変化率は実際にはゼロの値です(前のサイクルでnullでないと仮定)。この場合、一般的に式に対する適切な答えはゼロです。この最新のサイクルでは測定が行われなかったため、測定された変化はありませんでした。それは、それが変化しなかったことを意味するものではなく、その側面に関して何も測定、記録、または伝達されなかったというだけです。


0

確かに、彼らは「利用できない」ことを意味するときにフォームに「N / A」を置くという概念を理解しています。たとえば、「ベンジャミン・フランクリンは何歳ですか?」という質問に答えるために 答え0とN / Aは明らかに異なります(後者は正しいです)。同様に、回答0とNULLは異なります。


0
  • NULLは値がないことです。
  • -Zero-は値であり、その値は-Zero-です。

これらの概念を誰かに説明する必要がある場合、2つのボックスを描画します。

  • 空のボックスは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変数を追跡しない場合は、すでに存在するものを使用します。これは、オーバーフロー、スタックの破損、またはその他の厄介な副作用につながる可能性があります。

言語 NULL変数を追跡する場合、これを処理するための規定のケースがあります。IEはNULLをゼロとして扱い、例外をスローし、nopとして扱います。

上司のためにデモンストレーションを行うには、古紙を数枚入手してください。

  1. グラス2杯と白棒を取ります。
  2. ページの一部を白抜きにし、ゼロを書き留めます
  3. その上にグラスを置きます(これはvar aです)
  4. ページの別のセクションにガラスを置きます(これはvar bです)

-1

この質問に対するさまざまな答えから判断すると、すでにわかっていることを結論付けることができます。nullは多くのことを意味します。

データが次のいずれかであることを意味します:

  • 知られていることが知られていない、
  • 知られていないことがわかっている、
  • 無効(測定エラーなど)、
  • アクセスできない(セキュリティ面など)
  • 既知であることがわかっているが、現在のデータ処理とは無関係
  • データは無限です(データベースでよく使用されます)
  • おそらく私が考えていなかった10のこと

このため、および他の多くの理由から、null値の意味をカプセル化するデータ構造(たとえば、Optionalクラス)を定義すると便利なことがよくあります。


-2

これを-1した人はユーモアのセンスがありません。FWIW私は建築家です。

ヌルは空です。伝説によると、「私は知らない」、「彼らは言わなかった」、「誰かがこれを破った」など、Nullの17のフレーバー(考えられる意味)があります。単なるプログラマーの暗い裏部屋からscるDBAとアーキテクト以外は、誰もその理由を知りません。彼らは上司に丁寧に微笑み、信じられないほど複雑な知恵に深い関心を持って舌を振ります。給料小切手。それでも、ヌルは彼らの秘密を決して語らない。それらは空のブラックホールです。1つのnullが別のnullに等しくなることはありません。各空は平等で空であり、空がすべてではないことを認めようとしないからです。もちろん、これは推測です。なぜなら、nullを尊重する自己は実際にそれを認めることができないからです。時々、nullは()に大量の実データを吸い込みます。これはバグと呼ばれますが、実際にはプログラマーの心が空であることを忘れているだけです。ですから、時々繁殖します。しかし、どのように、またはなぜ、すぐに忘れられます。()は、nullまたは彼のいとこnilの兆候である場合がありますが、逆説的にはめったにバグではありません。

ゼロは何かの明確な量です。ゼロはヌルよりもずっと幸せです。ゼロは単に怠け者であり、結果に多くを追加しないでください。

退屈な、非常に古い正確な答えのために、Nullは「欠落している情報と適用できない情報」の表現です。EFCodd、SQLの作成者。

Coddは、第3の標準形も発明しました。これは、予備的な拷問の形として、若いコンピューターサイエンティストの心に適用されます。一度マスターすると、完全に無視されます。同様のことがオブジェクト指向設計が導入されたときに起こります。そして、私たちはそれを放っておくのは決して幸せではないので、インピーダンスの不整合が生じて、はしゃぐ摩擦に加わります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.