ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
プログラミング言語における演算子の一つで、比較のための等価演算子の一つ。
=== を定義するプログラミング言語は多くはないが、==よりも何かしら「厳密」な比較を行なうために用意する。
何をもってより「厳密」な比較とするかは、プログラミング言語の設計による。
JavaScriptでは===は「厳密等価演算子」と呼ばれ、==の「等価演算子」と機能的に区別されている。
元々JavaScriptは型が曖昧である。従って以下の式は成立し、trueとなる。
let data_int = 1;
let data_str = "1";
if (data_int == data_str) { ... }
JavaScriptに限らず、動的型付け言語はだいたい同じ問題を持っているが、この言語仕様はバグの温床でしかない。
さらに、原則としてJavaScriptでは「null」「undefined」「空文字 ""」「0」が偽(false)と定義されている。この四つの組み合わせの全てで比較してtrueとなるわけではないが、例えば undefined と null を等価演算子で比較すると一致しtrueとなる。
let data = undefined;
if (data == null) { ... }
また上述のように空文字 "" も偽値(false)であるため、次の比較も成立しtrueとなる。
let str = "";
if (str == false) { ... }
こういった想定しない問題を起こすが、厳密等価演算子を用いるとこれら完全に一致していないものはfalseを返す。
Kotlinも、Javaと同様に同等の概念が二種類あるが、Javaは演算子が==しかないのに対して、Kotoinは==と===があり、なおかつJavaとは使い方が違っていて、C/C++の拡張とみなせる動きになるよう改良されている。
構造的同等は、変数がもつ値が同じかを比較するものである。Javaは演算子ではなく a.equals(b) というメソッドで実現されているが、Kotlinではこれを a == b と自然に書くことができ、他のプログラミング言語(例えばC/C++など)と見た目でも同様となる。
一方、Javaの == は参照等価であり、二つの変数が同じ値を持っていてもそれぞれ異なるオブジェクトであればfalseになる。Kotlinでは、これを === で記述する。
val a = Integer(10)
val b = Integer(10)
aとbは同じ10を持つ変数だが互いに異なるオブジェクトである。この時Kotlinでは、a == b は成立(true)するが、a === b は不成立(false)になる。二つの演算子はこのように使い分けることができる。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます