Null
と 空文字
は同じ意味(解釈)ではありません。
システムの設計や開発、保守、運用など様々なシーンで使用される用語ですが、
意外と間違えて使用されているようです。
Null・空文字以外にも「空白
・スペース
・ブランク
」といった用語があり、
それらすべての違いを解説します。
- Nullや空文字、空白、スペース、ブランクについて
- イメージをつかみたい方
- 再確認したい方
改めて、この記事の内容を調べてみた結果、「ブランク」は言語やDBにより、
取り扱いが違うことがわかりました。
間違えていた内容・表現を差し替えています。
“Null と 空文字” 実際の使用例
私の体感で特に勘違いされていているのは、Null
(ヌル)と空文字
です。
この2つ以外にも該当する概念ですが、ざっくりと違いを表現するとデータの種類の違い。
プログラムにおける判定やデータベースのデータ取得などの実例をあげます。
これらの例は置いておいて、すぐに違いを把握したい場合は後述に “違いがわかる表” を掲載しているので、
そちらをご参考ください。
空文字の使用例:プログラム C#
下記はテキストボックスtextbox_jyusho
が空文字(””)の場合、エラーのメッセージを表示するというプログラムの一部分です。
// テキストボックス「textbox_jyusho」に何も入力していない場合
// メッセージボックスで通知する
if textbox_jyusho.Text == "" {
MessageBox.Show("住所が未入力です。",
"必須入力エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
なるほど。textbox_jyusho.Text == ""
で空文字か判定しているっピね
Nullの使用例:データベース SQL Server
データベースの商品テーブル(TBL_SHOHIN
)でWHERE NAME IS NOT NULL
の条件により
項目の商品名(NAME
)がNull以外の商品データを取得するSQLコマンドです。
-- データベースのテーブル「TBL_SHOHIN」より項目「NAME」がNull以外のデータを取得
SELECT NAME, VALUE FROM TBL_SHOHIN WHERE NAME IS NOT NULL
DBではWHERE NAME IS NOT NULL
で、
名前がNullデータ以外のデータを取得という条件式っピね。
それぞれの違いを詳しく解説
5つをグループ分けすると…
同じ意味となる用語でグループ分けすると下記3種類に分類されます。
- “Null” グループ
- “空文字” グループ
※ 利用している環境によりブランクが仲間に入る
- “空白・スペース” グループ
※利用している環境によりブランクが仲間に入る
ブランクは利用している環境によって扱われ方が異なります。
違いがわかる表
それぞれの5つの相違点をあらわした表です。
繰り返しになりますが、ブランクは利用環境によって扱いが変わる用語です。
その為、表でも具体的な表現はしていません。後述で解説しますね。
名前 | Null | 空文字 | 空白 | スペース | ブランク |
---|---|---|---|---|---|
読み方 | ヌル、もしくはナル | カラモジ、もしくはクウモジ | クウハク | - | - |
英語で表現 | “Null” or “Null string” | “Empty” or “Empty string” | “Whitespace” | “Space” [半角スペース] “Half-width Space” or “Single-byte Space” [全角スペース] “Full-width Space” or “Multi-byte Space” | “Blank” |
プログラム表記例 | null | "" or '' | " " or ' ' | " " or ' ' | ※ 利用環境により変化 |
わかりやすいイラスト(イメージ図) | ※ 利用環境により変化 | ||||
イラストの状態 [書道用品で表現] ・下敷き プログラムの言語など環境がある土台を表す。 ・半紙 土台にある文字入力できる器として表現。 | 下敷き:あり 半紙 :なし 文字 :- | 下敷き:あり 半紙 :あり 文字 :なし ※ 青い点線は、文字数がない事を表現 | 下敷き:あり 半紙 :あり 文字 :あり ※ 文字の内容は空白(スペース) | 下敷き:あり 半紙 :あり 文字 :あり ※ 文字の内容は空白(スペース) | ※ 利用環境により変化 |
イラストの解説 | プログラムの変数やデータベースのテーブルなど利用している環境の土台(下敷き)はあるが、文字入力できる器(半紙)がない状態。 | 土台(下敷き)や文字入力できる器(半紙)がある状態だが、文字が書かれていない状態。 | 土台(下敷き)や文字入力できる器(半紙)がある状態で、かつ文字で”空白”が記載された状態。 ※ 空白(スペース)は、スペースキーで入力した際、画面上には見えないのでイメージが掴みにくいと思うが、空白(スペース)にも文字コードがしっかりと割り振られており、視認できない文字として表示される。 | ※ 空白と同様。 | ※ 利用環境により変化 |
グループ | Null | 空文字 ※ 環境によりブランクも入る | 空白 = スペース ※ 環境によりブランクも入る | 空白 = スペース ※ 環境によりブランクも入る | ※ 利用環境により変化 |
ここまで4つの用語「Null・空文字・空白・スペース」に関して解説・説明しました。
表のとおり「空白とスペース」は同じ意味で使われていますね。
えっ、でも仕事の現場や会話する人によって空白と呼んだり、スペースと呼んだりして、
呼び方が変わるのは、なぜっピ 🤔
それはIT用語全般に言える事なんだけど、同じような意味を持つ用語がたくさんあるんだよね。
わたし個人的な意見だけど、その仕事現場で伝わりやすさを重視するのであれば、
環境に合わせた用語で呼称した方が良いと思うよ。
たしかに仕事現場に合わせて用語を使った方が会話するもの同士、頭で変換が必要なくなるっピね。
それぞれの概念がどのように扱われるか履き違えている場合、認識を合わせる必要があることは忘れないでね。
わかったっピ。
これでドキュメントや会話、メールなど伝達する際もスムーズになるっピヨ♪
環境により意味・取り扱いが変わる「ブランク」とは
IT分野における「ブランク」という言葉は、意味・プログラムやDBでの取り扱われ方が統一されていません。使用するプログラムやデータベースの違いによって大きく変わる事があります。
そのような環境に依存する背景があるためか、仕事の現場環境により認識にばらつきがあります。
具体的な例としてプログラムにおけるブランクの意味合い・取り扱われ方の違いを解説します。
例1:表計算ソフトにおけるブランクの扱い
プログラムというのは微妙な所ですが、有名どころの表計算ソフト、Microsoft Excel と Google スプレッドシートでは、ブランクを判定する「ISBLANK」という関数があります。
実際にISBLANK関数を使用した結果は下記の通り。
テストケース | テスト対象の値 | 実行結果 |
---|---|---|
空文字 | “” | TRUE |
空白(スペース) | ” “ | FALSE |
値あり | ”test-value” | FALSE |
この結果から表計算ソフトでは、「“空文字” のことだけを ブランク とも呼ぶ」となります。
それ以外の 空白
は違う意味合い・取り扱われ方となります。
例2:Javaにおけるブランクの扱い
Javaでも、ブランクを判定するメソッド「IsBlank」が存在します。
IsBlankメソッドの結果は下記の通り。
テストケース | テスト対象の値 | 実行結果 |
---|---|---|
空文字 | “” | true |
空白(スペース) | ” “ | true |
値あり | “test-value” | false |
Javaでは、「“空文字” または “空白” のことを ブランク とも呼ぶ」という扱いに。
例3:Kotlinにおけるブランクの扱い
テストケース | テスト対象の値 | 実行結果 |
---|---|---|
空文字 | “” | true |
空白(スペース) | ” “ | true |
値あり | “test-value” | false |
KotlinもJavaと同様、「“空文字” または “空白” のことを ブランク とも呼ぶ」という扱いとなります。
参考情報
- Javaにおけるブランク情報
https://www.appsdeveloperblog.com/check-if-java-string-is-empty-null-or-whitespace/ - Kotlinにおけるブランク情報
https://qiita.com/kazu_developer/items/88af247034049945f65d
ここまで詳しく解説した通り、ブランクはIT分野で共通認識やルールは無く、使用している環境により意味合いが変わるということがわかりました。
海外のサイトについてもブランクの取り扱われ方について調査しましたが、同じように共通認識がないようです。
また、“Blank” という言葉自体も、“Empty” や “White space” と比較すると、極端に使用頻度が低い言葉のように見えました。
まとめるとブランクという意味合いは、そのエンジニアがJava畑で育ったのかC言語畑で育ったのか、はたまたMySQL畑で育ったのかなど環境によって認識が変わる用語。
環境依存という背景もあり所属している会社などにより異なった認識を持つ。さまざまな現場を経験していないと間違いに気づきにくい用語ということが言えると思います。
ブランクという用語の使用すると…
私個人の見解では、共通認識がない「ブランク」という用語の使用は、
なるべく控えたほうが良いと考えています。
たしかに混乱の種になりそうっピね
ちなみに私はこの記事を作成する前は「ブランク=空文字」という関係性だと勘違いしていました!
間違いに気付けた良かった……
場合によるけど私はスペースよりも空白を意識的に使用
私から発信する際、意識的に「空白」を使っています。
スペースは文字制御以外においても、よく登場する単語で混乱を招く恐れがあるという理由です。
ただ、厳密に空白の種類を表すときは「半角スペース」や「全角スペース」などのように “スペース” を使うこともありますね。
なるほど、だっピ😊
“Null と 空文字” に関する例外
ここまでの説明で Null
と 空文字
は別物という内容で解説しました。
実は、この概念もプログラムやデータベースにより変わるケースがあります。
(すごく、ややこしいですよね……)
Null
と 空文字
に関して例外的な取り扱いをするプログラムやデータベースは少ないです。
少ない環境でも根幹的なデータの取り扱われ方が違うことでシステムの設計方法や対応方法に大きく関わる重要なポイントとなるでしょう。
プログラム関連で例を挙げると PHP や JavaScript でも特殊なケースが存在するようですが、
ここでは一例としてOracleデータベースを使い解説します。
Oracleデータベースにおける “Null と 空文字” の扱い
Oracleデータベースでは他のデータベースやプログラムとは異なり、Nullと空文字がほぼ同じ扱いとなっています。
つまり、「Null ≒ 空文字」という関係性。
「Null ≒ 空文字」とは
こちらの解説ページにあるとおり、完全に同じ扱いではありません。「≒(ニアリーコールまたは、ほぼ等しい)」と表すことができます。
前述した解説にもあるとおりOracle環境でデータを検索するSQL文を実行する場合、空文字はNullとほぼ同じ扱いで処理されます。
ただ、Oracleデータベースのテーブルの実データはNullと空文字は別けて登録することが可能です。
正直、Oracleデータベースを使ったことがないと理解するのは難しいですよね。
完全に解説ページも理解する必要はなく、重要なのが「環境によって Null と 空文字 の意味合いや取り扱われ方が異なる。」と認識できれば問題ありません。
脱線したので話を戻しますね。
実データを Null と 空文字 で別けて登録する事に関してですが、技術的にできるからといって何も考えずに登録して良いという訳ではありません。
データベースを使ったシステムで Null に特別な意味を持たせてしまうと、
ややこしいシステムができあがってしまいます。
そのようなシステムがある場合は、良い設計ができていないと思われます。
仮にそのシステムがゼロから構築したシステムであればデータ設計に問題があり。
リプレースしたシステムであれば、データ移行に問題があったと推測できるでしょう。
最初にさわったデータベースはOracle
ちなみに私が最初に触ったデータベースは、Oracleでした。
その後、他のデータベース(SQL Server)にふれる機会があり、
Oracleと同様に「Nullと空文字」は同じ扱いだと勘違いして深みにはまってしまったことがありました 😓
過去のバージョンとの互換性の問題があるので、簡単にはできないと思うっピけど、
Oracleの Null
と 空文字
に関する仕様は見直してほしいっピ💦
Nullの発明は失敗だった?
実はNullに関して今回、興味深い情報を見つけたよ。
Nullを発明したコンピューター科学者のアントニー・ホーア氏が2009年のソフトウェアカンファレンスで、
「Nullの発明は失敗だった」という謝罪があったみたいだよ。
えっ💦 そんなことがあったっピね。
驚くよね。
今まで私もNullという考え方がある前提でプログラムやデータベースに触れてきたので、すごい驚きの情報だったよ。
Oracle側の意図はわからないけど、
もしかすると業界全体がNullという考え方を見直していくような方向に動くかもしれないね。
参考情報
まとめ
Null
と空文字
は違う
- グループ分けすると下記の3つにわけられる
Null
空文字
(環境により追加でブランク
が入る)空白
・スペース
(環境により追加でブランク
が入る)
ブランク
はプログラムやデータベースの環境や現場によっても意味合い・取り扱われ方が異なる
Null
と空文字
についても特殊な例外ケースあり
以上でこの記事は終わりです。Null
や 空文字
をはじめとする用語の違いについて解説しました。
会話していて意外と認識が間違えている方が多いなーと肌で感じた為、記事にしてみました。
この記事で “知るきっかけ” や “振り返るきっかけ” になれば幸いです。
それでは、また次回お会いしましょう。さようならー
バイバイっピー🎶
コメント