Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

不等価演算子(フトウドウカエンザンシ)とは | 意味や読み方など丁寧でわかりやすい用語解説

不等価演算子(フトウドウカエンザンシ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

不等価演算子 (フトウカエンザンシ)

英語表記

not equal operator (ノットイコールオペレーター)

用語解説

不等価演算子とは、二つの値が互いに等しくないかどうかを評価し、その結果を真偽値(trueまたはfalse)で返す演算子である。主にプログラミングにおいて、条件分岐やデータのフィルタリング、特定の条件を満たさない要素の抽出などに用いられる。これは、二つの値が等しいかどうかを評価する等価演算子(=====など)の逆の働きを持つ。

この演算子は、等価演算子が二つの値が等しい場合に真を返すのに対し、不等価演算子は二つの値が等しくない場合に真を返す。多くのプログラミング言語では、不等価演算子を!=という記号で表現する。例えば、C言語、C++、Java、JavaScript、PHP、Python、Rubyなど、C系の文法を継承する言語で広く採用されている。SQLにおいては、!=の他に<>という記号も不等価演算子として利用される。

特にJavaScriptやPHPなどの一部の言語では、値の比較において「非厳密な不等価」と「厳密な不等価」の二種類の演算子が用意されている場合がある。非厳密な不等価演算子(!=)は、比較対象となる二つの値の型が異なる場合、一方または両方の値を内部的に型変換(暗黙の型変換)してから比較を行う。例えば、JavaScriptにおいて数値の1と文字列の'1'1 != '1'で比較すると、文字列'1'が数値1に型変換されるため、結果はfalseとなる。これは、型変換後に両者が等しいと判断されるためである。

これに対し、厳密な不等価演算子(!==)は、型変換を一切行わずに値と型の両方を比較する。厳密な不等価演算子では、値が異なるか、または型が異なるかのいずれかの条件を満たせば真となる。先の例で、1 !== '1'をJavaScriptで評価すると、値は1'1'で同じように見えても、型が数値と文字列で異なるため、結果はtrueとなる。プログラミングにおいては、意図しない型変換によるバグを防ぐため、可能な限り厳密な不等価演算子を使用することが推奨される場面が多い。

不等価演算子は、プログラムの制御フローを決定する上で非常に頻繁に利用される。例えば、if (変数A != 値B)という形で条件式を記述することで、「もし変数Aが値Bと異なるならば、特定の処理を実行する」といった条件分岐を実装できる。また、ループ処理において「配列の要素が特定の条件を満たさない限り繰り返す」(例えばwhile (配列[i] != 終了値))といった終了条件の設定にも用いられる。データベースの操作においても、SQLのSELECT * FROM テーブル WHERE カラム名 != '特定の値'のように、特定の値を持たないレコードを抽出するフィルタリング条件として活用される。

不等価演算子を使用する際にはいくつかの注意点がある。一つは浮動小数点数の比較である。浮動小数点数はコンピュータ内部で完全に正確に表現できない場合があるため、例えば0.1 + 0.2 != 0.3のような計算結果が予期せずtrueになることがある。これは、0.1 + 0.2の結果が厳密には0.3とわずかに異なる値になることがあるためである。このため、浮動小数点数の等価性や不等価性を直接比較するのではなく、「差の絶対値が非常に小さな許容範囲内にあるか」といった別の方法で比較することが推奨される。

もう一つはオブジェクトの比較である。多くのプログラミング言語において、!=演算子でオブジェクトを比較する場合、それはオブジェクトの内容が等しいかどうかではなく、二つの変数が同じメモリ上のオブジェクトを参照しているか(同一のインスタンスであるか)を比較する。例えば、内容が全く同じ二つの異なるオブジェクトインスタンスを作成し、それらを不等価演算子で比較すると、多くの場合結果はtrueとなる。オブジェクトの内容が等しいかどうかを比較したい場合は、通常、オブジェクト内の各プロパティを個別に比較する専用のロジックやメソッドを実装する必要がある。

また、プログラミング言語によっては、nullundefinedといった特殊な値の扱いも不等価演算子の結果に影響を与えることがある。これらの値が他の値と比較された際にどのように評価されるかは、言語の仕様によって異なるため、事前に確認しておくことが重要である。これらの点を理解し適切に適用することで、より堅牢で意図通りの動作をするプログラムを記述できるようになる。

関連コンテンツ