文字列の無効値は空文字で統一することにした(例外はある)

太古の時代、String, Integer, Doubleといった型は、プリミティブ型と言われNullを許容しなかった。しかしモダン言語の多くは、これらの型もNullを許可するようになった。原始プログラマの私は、Stringの無効値はNullにすべきだろうか?という疑問に頭を悩ますことになる。

結論としてStringの無効値は空文字で統一することにした。空文字とNullを明確に区別するべき理由がある時を除いては。だが経験上、そのようなケースは稀である。なら無効な文字列は、空文字で統一した方が勝手が良く、バグの発生率も下げてくれる。

ある文字列を画面に表示するか否かの判定の時、その文字列がNullも許可するなら条件判定は、Nullチェックと空文字チェックの両方が必要になる。このコストを払いたくはない。

var name: String?
if (name != null || name?.length > 0) {
  // 表示対象とする
}

空文字チェックを忘れると、空行が表示され無駄な余白があるというバグ報告を受けることもある。

無効な文字列は空文字で統一しておけば、以下のように書ける。

var name: String
if (name.length > 0) {
  // 表示対象とする
}

TypeScriptはなんでもいい。どうあれ1文字以上の文字列は以下のように判定可能だからだ。

let name: String?
if (name) {
  // 表示対象とする
}