ないということの難しさ【Null】
散らかった部屋を片付けるぞ!と意気込んで買った収納ボックス。結局片付けに取りかかることはなく、空っぽの箱がただ棚に積まれたままに。それっぽくラベリングまでしたのに。
お気に入りの紅茶。毎日飲んでいたらあっという間に空っぽに。新しい紅茶を購入したものの、古い空の箱を捨て忘れて隣に置いたまま。手を突っ込んでみてやっと、空箱を置いたままにしていたことに気がつく。
こんな杜撰で横着な生活をしている人は私くらいかもしれませんが、日常生活には「空っぽのままの箱」が結構転がっていると思います。しかしプログラミングでは、空っぽのままの箱を転がしたままにしておくと、いろいろと問題が起こってしまいます。予期せぬエラーやバグの原因になってしまうそうです。確かに、楽しみに飲むぞと思っていた紅茶が知らない間になくなっていたらとても悲しいです。来客用にと思っていたお菓子が知らない間に食べられていたら困ります。
ないということ:Null
プログラミングにおいては、「Null」という表現で「ないということ」を表します。調べてみて初めて知ったのですが、ドイツ語で「0」という意味があるそうです。プログラミングを学び始めて、ちょっと動かしてみようかなと思った矢先、Nullのエラーに阻まれることは少なくはないと思います。私はもう嫌というほど見ました。
また、エラーが出ないにしても、思った形で処理が動いていない=Nullが悪さをしている、というパターンもあります。これが一番厄介ですよね・・。
正しく初期化する
Nullによるエラーやバグを回避するための方法として、「正しく初期化する」ことがまずは大切になります。箱を買ったらすぐに中身を入れておく、というイメージでしょうか。あとで片付ければいいか~ではなく、片付けるための収納ボックスを買ったらすぐにものを仕舞ってしまいましょう。
とはいえ、すぐに収納するものが決まっていない場合もあると思います。数日後に宅配で届く予定の本を仕舞おうと思って買った箱に、適当にノートを押し込むと、それはそれで後々面倒です。そのため、初期化はとりあえずこのような形で行うことが一般的だとされています。
String box = "";
int box = 0;
このような形で初期化しておくと、仮に後から届いた本を面倒くさがって床に積んだとしても、Nullにはなりません。宅配ミスで別の家に届いてしまったとしても、とりあえずNullにはなりません。
Nullかどうか確認してから行動する
他にも、中身がNullかどうかを先に確認する、という方法があります。紅茶の箱に一旦手を突っ込んで、中身が入っているか確認してから行動するイメージです。
If (box != null ) {
紅茶が残っていたので飲む
} else {
空っぽだった・・
}
Nullになっていた場合にエラーを排出するようにしてあげると、Nullを見逃さずに済みます。自分では中身を入れたつもりでも、うまく中身が入っていない可能性もあるので、少し手間はかかりますが、大切な工程ですね。
きちんと注文したのに、宅配ミスで届いていなかったら困ります。そしてそのことに気づかないままだったら、飲みたいと思ったタイミングに紅茶がない!という事態が起こってしまいます。事前に確認しておいた方が安心ですよね。
「Null」ってプログラミング分野特有の要素だと思っていたのですが、こうして書いてみると日常生活の空箱もなかなか厄介な存在だな・・と気づかされました。プログラミングではNullに気をつけつつ、ごちゃついた部屋もそろそろ片付けたいと思います。箱の中に何が入っているのかを分かりやすくしておく、というのはシステムでも日常生活でも、大切なことですね。