よく勘違いされますがNullと空文字は一緒ではありません。
システムの設計や開発、保守、運用など使用される事が多い用語ですが、
意外と間違って使われているようです。
プログラム(プログラミング・言語)やデータベース(DB)で使う
Nullや空文字を始め、空白やスペース、ブランクについても違いを解説します。
- Nullや空文字、空白、スペース、ブランクについて
- イメージをつかみたい方
- 再確認したい方
改めて、この記事の内容を調べてみた結果、「ブランク」は言語やDBにより、
取り扱いが違うことがわかりました。
間違えていた内容・表現を差し替えています。
実際の使われ方(“Null と 空文字”)
私の体感で特に勘違いされていているのは、Null(ヌル)や空文字です。
ざっくりと違いを表現するとデータの種類の違いとなります。
プログラムの判定やデータベースのデータ取得における実例を最初に紹介します。
実例が気にならない方は、本項を読み飛ばしてください。
後述には、わかりやすいイラストを交えた“違いがわかる表”も記載しています。
空文字の使用例:プログラム 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データ以外のデータを取得という条件式っピね。
違いを解説
グループ分けすると
同じもの同士をグループ分けすると下記3種類に分類されます。
- “Null” グループ
- “空文字” グループ
※ 利用している環境によりブランクが仲間に入る
- “空白・スペース” グループ
※利用している環境によりブランクが仲間に入る
違いがわかる表
それぞれの相違点をあらわした表です。
ブランクについては少し特殊な為、この表では具体的に表現していません。
後述で解説しますね。
名前 | 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 | 空文字 ※ 環境によりブランクも入る | 空白 = スペース ※ 環境によりブランクも入る | 空白 = スペース ※ 環境によりブランクも入る | ※ 利用環境により変化 |
ここまでの解説で“Null と 空文字 、 空白・スペースの違いを説明しました。理解できたでしょうか。
表のとおり「空白とスペース」は同じ意味で使われますね。
えっ、でも仕事の現場や人によって空白と呼んだり、スペースと呼んだりして、
呼び方が変わるのは、なぜっピ 🤔
それはね。
IT用語全般に言える事なんだけど、同じような意味を持つ用語がたくさんあるんだよね。
その仕事現場での伝わりやすさを重視するのであれば、
環境に合わせた用語で呼称した方が良いと思っています。
たしかに環境に合わせて用語を使った方がお互い頭の中で、
変換が必要なくなるっピね。
ドキュメントや会話、メールなど伝達する際もスムーズになるっピ♪
意味合いを完全にはき違えて使っている現場で訂正するか微妙な所ですが、
すくなくとも自身では意識して間違っていない言葉を使っていきたいですね。
環境により意味が変化する「ブランク」とは
IT分野における「ブランク」という言葉は、意味が統一されていません。
使用するプログラムやデータベースの違いによりブランクの扱いが異なっているというのが現状です。
そのような背景があるためか、仕事の現場環境によって用語の扱われ方においても、ばらつきがあります。
意味合いが変わってくる一例として、プログラムを題材に解説します。
例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データベースを使い例外的なNull と 空文字の扱われ方について、
解説していきます。
Oracleデータベースにおける“Null と 空文字”の扱い
Oracleデータベースでは他のデータベースやプログラムとは異なり、Nullと空文字がほぼ同じ扱いとなっています。
つまり、Oracleでは「Null ≒ 空文字」という関係性。
詳しい解説
こちらの解説ページにある通り、完全に同じ扱いではないので、
「≒(ニアリーコールまたは、ほぼ等しい)」と表記。
このページで解説している通り、Oracle環境をSQL文でデータを検索する場合、空文字はNullとほぼ同じ扱いで処理されます。
ですが、Oracleデータベースのテーブルに格納されている実データはNullと空文字は別けて登録可能です。
使ったことがないと、かなり難しい内容ですよね。
ただ、技術的にできるからといって何も考えずにNullや空文字を扱って良い話ではありません。
データベースを使ったシステムで実データのNullに対し特別な意味を持たせて設計すると、
Nullと空文字の2種類のデータが混在しているシステムができあがります。
そのようなシステムは良い設計のシステムとはいません。
仮に、そのシステムがゼロから構築したシステムであれば、データ設計に問題があり。
リプレースしたシステムであれば、データ移行に問題があった可能性も考えられます。
参考情報1:Oracle公式 Nullについて(英文)
OralceにおけるNullの扱われ方の公式解説ページ。
私が最初に使ったデータベースはOracleでした
ちなみに私が最初に触ったデータベースは、Oracleでした。
その後、他のデータベース(SQL Server)にふれる機会があり、
Oracleと同様に「Nullと空文字」は同じ扱いだと勘違いし困った事がありました 😓
過去のバージョンとの互換性の問題があるので、簡単にはできないと思うっピけど、
OracleのNullと空文字に関する仕様は見直してほしいっピ💦
Nullの発明は失敗だった?(参考情報)
実はNullに関して今回、興味深い情報を見つけたよ。
Nullを発明したコンピューター科学者のアントニー・ホーア氏が2009年のソフトウェアカンファレンスで、
「Nullの発明は失敗だった」という謝罪があったみたいだよ。
えっ💦 そんなことがあったっピね。
驚くよね。
今まで私もNullという考え方がある前提でプログラムやデータベースに触れてきたので、
すごい驚きの情報だったよ。
Oracle側の意図はわからないけど、
もしかすると業界全体がNullという考え方を見直していくような方向に動くのかもしれないね。
まとめ
- 「Null」と「空文字」は違う
- グループ分けすると「Null」と「空文字」、「空白・スペース」の3種類
- 「ブランク」はプログラムやデータベースの環境や現場により扱い方が変わる
- 「Null と 空文字」の関係性は、特殊な例外ケースあり
以上でこの記事は終わりです。
Nullや空文字などの違いについて解説しました。
会話していて意外と認識が間違えている方が多いなーと
肌で感じた為、記事にしてみました。
この記事で“知るきっかけ”や“振り返るきっかけ”になれば幸いです。
それでは、また次回お会いしましょう。
さようならー
バイバイっピー🎶
コメント