Lv1プログラマの誰得メモ

総務女子の趣味とか勉強に関係することのメモ

世界の中心でnullを叫ぶ

人類が初めて出会うExceptionはNullPointerExceptionだと思う。 nullは諸悪の根源。この世にあってはならない存在。抹殺しなければ。(過激派)

nullはあらゆる型にセットできますが、特にString型のnullには注意が必要だと思っています。

例えば単純な結合の場合、通常は以下のようになります。

String love = "愛";
System.out.println("世界の中心で" + love + "を叫ぶ");
// "世界の中心で愛を叫ぶ"

一方で、変数loveがnullの場合、以下のようになります。

String love = null;
System.out.println("世界の中心で" + love + "を叫ぶ"); 
// "世界の中心でnullを叫ぶ"

変数loveには文字列ではないnullをセットしたはずなのに、文字列結合を行うと文字列"null"として結合されてしまいます。なんでやねん!

Java以外の言語ではどうなるのか見てみます。

PHP

$love = null;
echo("世界の中心で" . $love . "を叫ぶ");
// "世界の中心でを叫ぶ"

C#

string love = null;
System.Console.WriteLine("世界の中心で" + love + "を叫ぶ");
// "世界の中心でを叫ぶ"

VB

Dim love As String  = Nothing
Console.WriteLine ("世界の中心で" & love & "を叫ぶ")
// "世界の中心でを叫ぶ"



言語によって文字列型nullの単純結合の結果が違うみたいです。Javaは“愛”がないと代わりに「null」を叫んでしまうんですね。

今回は単純な結合("+"とか"&"で繋げる)ですが、各言語には文字列結合の関数が用意されているので、用途に合わせて使ってきたいですね。

ぶっちゃけnullは全否定できません。日付型とか特定の日付をセットしたくない場合にnullがなかったら困るし。