等価演算子
読み:とうか-えんざんし
外語:relational operator
演算子のうち、二つの被演算子が等価であるかを求めるもの。
概要
二つの被演算子が何を持って等価とみなすかは、そのプログラミング言語の仕様に大きく依存する。
型を曖昧に扱う言語であれば、数値の 1 と文字列の "1" を等価とみなすが、そうでない言語では非等価とみなす。型が曖昧な言語の場合、曖昧な比較のほかに厳密な比較方法を用意することが多くある。その場合、関数やメソッドのようなものを使う場合や、厳密に比較するための厳密等価演算子を別途用意することもある。
特徴
種類
- 等価演算子
- (曖昧)等価演算子 ‐ 例えば==
- 厳密等価演算子(同値演算子) ‐ 例えば===
考え方
C/C++やその派生(Javaなど)では型を厳密に扱うため、比較演算子として曖昧・厳密の区別はない。
但し、こういった言語は異なる識別子(変数)で同じオブジェクトを参照することが可能となっているため、「値が同じ」「参照するオブジェクトが同じ」の区別が必要となることもある。
C/C++では特に言語的なサポートはないが、ポインターを比較して同じ場所を指しているかどうかで区別は可能である。
Javaの場合は==は「参照するオブジェクトが同じ」かを見るもので、一致するかどうかは.equals()メソッドを使う仕様になっていて、C/C++系言語ではあるがC/C++とは仕様が異なる。対してBetter Java(より良いJava)として開発されたKotlinでは、「値が同じ」かは==、「参照するオブジェクトが同じ」かは===で比較するように別々の等価演算子が用意され、==についてはC/C++と仕様が一致しており違和感がない。
言語による差
= 記号は代入にも使うため、それとどのように区別するかによって言語ごとの設計思想に違いが出ている。
- BASICとその派生 ‐ =
- Pascalとその派生 ‐ =
- Cとその派生 ‐ ==
参考までに、代入は次の通りである。
- BASICとその派生 ‐ =
- Pascalとその派生 ‐ :=
- Cとその派生 ‐ =
BASICの場合、比較できる場所と代入できる場所は明確に区別されているため、双方=でも問題が出ることはない。
Pascalでは代入を:=とし比較を=とした。対しCは代入を=とし比較を==とした。この二系統はいずれも理系的な言語ではあるが、どちらを=単体で使うか、判断が分かれた興味深い結果となっている。
再検索