ユーザーの入力フォームを作成した時、ふと疑問に思いました。
バックエンドでnullable: falseのようにnullを許容しない設定にしている時、
ユーザーが空文字("")を送ってきたら、それはnullable: falseに引っかかる?
または、" "のような空白文字を入力してきたら?
この場合、結論から言うとnullを許可しない設定でも、
nullable: falseの制約には引っかかりません。
nullとは?
「値が存在しない」ことを表す値です。
文字列が空とか、長さ0とかではなく存在しないんです。
空文字("")とは?
let name: string = "";
↑のように、長さ0の文字列。
これはnullとは別物なので、nullを許容しない場合でも認められます。
空白文字(" ")はspaceやtabという文字が入力されているので、
こちらもnullではありませんね。
紙はあるけど何も書いていない状態が空文字だとすれば、
紙がそもそもない状況がnullです。(と誰かが例えていました)
でも、現実問題、
フォーム入力では、""は実質的に未入力とみなしたり、
trim()して空白だけならエラーにするといった
バリデーションを行うことがほとんどなんじゃないかなと思います。
最後にちょっぴり
業務ではTypeScriptを使用しているため、今回はTSで実用的な範囲にしぼってまとめました!
C言語まで踏み込むとポインタやヌル文字、スペースとタブの違いなどさらに深く語れる部分もあるかとは思いますが、今回はスコープ外ということで...