はじめに ~この記事について~
こんにちは。NRIネットコム2025年入社の井上です。
この記事は、
「”何もない”を表せることって革命なんだよ!!!」
という事を伝えるため、プログラミングと数学における「何もない」を解説する記事となっております。
「プログラムにおける、0やnull、Noneの違い!」
「それぞれの意味を理解して、使いこなせるようになろう!」
といった、プログラミングに特化した記事ではございませんので、ご了承ください。
言語によって扱いは違いますし、なんならそういったドキュメントはもうすでにあるので、自分が書かなくてもいいんじゃない?と思った次第です。
逆に、ざっくり知りたいという方にはおすすめです。
”プログラミングにおける「何もない」”の章をお読みください。
それでは、本編へどうぞ。
目次
数学における「何もない」
まずは、数学の話から。
井上はエンジニアなので、PCがないと仕事ができません。
そんな大事なPCは、(突き詰めれば)0と1で動いています。
「ない」状態と「ある」状態を駆使しているわけですね。
(数学的には2進数やブール代数です。)
また、PCは計算機が進化して生まれたものでもあります。
つまり、数学の上に成り立っている物といっても過言ではありません。
数学がなければ、PCは生まれなかったという事です。
そんなわけで、数学の「何もない」についてザックリ紹介します。
数学で有名なものは、次の二つですね。
0
数学において「何もない」を表す数字です。
割り算の割る側で使用できない唯一の数であったり、掛けたら絶対に0になったりと、数字の中でも特別な数です。
∅
空(から)の集合、「空集合(くうしゅうごう)」を表す記号です。
集合の概念は基本情報技術者試験でも出てきますね。
プログラミングにおける「何もない」
自分はエンジニアという事で、それっぽいことを少しだけ。
プログラミングで出てくる様々な「何もない」について、違いをざっくり紹介します。
ここで一つだけ注意事項です。
紹介する概念や単語が、すべてのプログラミング言語共通ではないことに気をつけてください。
様々な言語からピックアップして紹介しているので、意味が若干違ったりすることがあります。
使う際はそれぞれの言語で調べなおすことをお勧めします。
null
プログラムにおいて、値などが「存在しない」ことを表します。
意図的に「何もない」を表したいときに代入することもあります。
⇒nilやNoneもほぼ同じ意味です。"NullPointerException"
通称「ぬるぽ」も有名です。
よくあるエラーの一つで、nullである変数や配列の要素に対して実行できない操作をしたときに出てきます。
例えば、変数の大きさをはかろうとした時に、存在しない変数を指定してしまった場合なんかです。
存在しないものの大きさなんて測れませんからね…0
上でも紹介しましたが、こちらでもしようと思います。
数学的な「0」として使うことはもちろん、整数型の初期値として使われることが多いです。
また、真偽の”偽"、「false」を表すために使われたりもします。
後は変化球をさらっと紹介します。
Empty
「何もない」が「ある」ことを表します。
一番わかりやすいのが空の配列ですね。
配列自体はあるけど、配列の中身はまだ入っていない状態、そんな時、その配列は”Empty”であると言えます。undefined
変数自体はあるけど、まだ何も代入されていない状態のことです。
エラーメッセージで見かける印象があります。void
関数が何も返さないことを表すキーワードです。
TypeScriptやJavaなどで使われます。
「何もない」がなかったら?
はい、ここからが本題です。
「何もない」を表せるありがたみについて書いていこうと思います。
数学の場合
まずは数学についてです。
「何もない」を表す「0」は、数学の根底を支える大事な要素です。
これ無しでは、現代数学は成り立たないといってよいでしょう。
一方で、数学の中にも「0」がないものが存在します。
それは「ローマ数字」です。
今回はそんな「ローマ数字」と、0がある「アラビア数字」を比較し、ローマ数字の弱点を2つ紹介したいと思います。
ローマ数字について
それではローマ数字について軽く説明します。
この数字は、アルファベットの記号を組み合わせて数を表現します。
基本となる記号には、Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)、Ⅿ(1000)があり、「Ⅱ」は1+1で2、「Ⅳ」は5−1で4というように、基本の記号を用いた加減で表現します。

このように、足し算引き算で数を表現し、一定の数でまとめることを繰り返し表現します。
大きな数が複雑
弱点1つ目は、
大きな数が複雑になってしまう事です。
試しに1988を表してみると以下のようになります。

読む気にもなりません。
愚直に数を足し引きするしかなく、読むのも書くのも面倒です。
これではあまり使いたくありませんね。
一方、アラビア数字では、1の位、10の位…のように、一定数ごとにまとまりを作り、その位置(桁)を用いて数を表す、「位取り」を用いることで、簡潔に表すことができます。

ローマ数字は0が存在せず、例えば「10」のような、1の位の数が存在しないことを表せないため、位取りを用いることができないのです。
無限に数を増やせない
弱点2つ目は、無限に数を増やせない事です。
ローマ数字は「足し算」と「引き算」で数を表すため、数を大きくするには大きな数を表現する記号が必要です。
例えば「3000」は、1000を表す「M」を用いて「MMM」と表せますが、「30000」は「10000」を表す記号がないため、表現できません。
これを解決するには、「10000」を表す記号を追加するしかなく、数を大きくしようとするたびに同じ問題にぶつかります。
つまり、無限に数を大きくしようとすると、無限に記号が必要となるのです。
一方、アラビア数字は位(桁)を増やすことで対応できます。
0があるおかげで、数を際限なく表現することが可能になったのです。
プログラミングの場合
次はプログラミングの場合について紹介します。
ここでは「何もない」を表す方法が、「0」しかない場合を考えてみます。
ぱっと思いつくのは、エラー処理ですね。
テストの点数管理をするアプリケーションを考えてみましょう。
例えばこんな画面があったとします。

点数を入力せずに確定を押すと、エラーにしたいです。

この時、内部の処理は「何も入力していない(=0)」なのでエラーとしています。
次に、0点を取った生徒がいるとします。
本来はそのまま確定としたいところですが、何もないを表す方法が「0」のみの場合は、「何も入力していない」のか「0を入力した」のかが判別できません。

困りました。
これでは0点の生徒がいるとエラーが起きてしまいます。
本来は、0なのか未入力(null、undefinedなど)なのかを判定し、処理を分岐する必要がありますが、 0しかない場合、そんなことはできません。
状態を正しく表現できず、バグや誤解が増えてしまいます。
古いプログラミング言語であるCOBOLでは、「何もない」を表すキーワードがありませんでした。
この言語では初期値の設定が必須で、「何もない」を表すことが想定されていなかったのです。
ですが、データベースやファイルからデータを読みこむ際には、nullや空白が含まれる可能性があります。
また、先ほどのようなアプリケーションを作る際も、nullが使えたらとっても便利です。
それではどのようにして「何もない」を扱っていたかというと、
色々工夫をして頑張っていました。
先ほどの点数入力ページの場合は、テストの点としてあり得ない「-1」を初期値として設定し、入力されたかどうかを判定します。
COBOL側には「何もない」が用意されていないので、 プログラマー自身が定義する必要があったのです。
結構大変そうですね。
おわりに
以上で、このブログを終えたいと思います。
「”何もない”を表せることって革命なんだよ!!!」
という事がお伝え出来たのであれば幸いです。
皆様も、日々目にする何気ない「0」や「null」に感謝してみてはいかがでしょうか。
それではまた。