【Ruby3.x】Numeric::eql?()メソッドの使い方
eql?メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
eql?メソッドは、数値オブジェクトが、比較対象のオブジェクトと値が等しく、かつクラスも同一であるかどうかを厳密に判定するメソッドです。このメソッドは、主にハッシュのキーとして使用される際に、オブジェクトの等価性を判断するために利用されます。
数値オブジェクトの等価性を判断する際には、==演算子とeql?メソッドの二つの方法があります。==演算子は、異なるクラスの数値オブジェクトであっても、その数値が同じであればtrueを返します。例えば、整数1と浮動小数点数1.0を==で比較するとtrueになります。しかし、eql?メソッドでは、値が同じであることに加え、比較対象のオブジェクトが全く同じクラスのインスタンスであることも条件となります。したがって、1.eql?(1.0)はfalseを返します。これは、1がIntegerクラスのインスタンスであり、1.0がFloatクラスのインスタンスであるためです。
この厳密な比較は、ハッシュテーブルにおいてキーの同一性を保証する上で特に重要です。ハッシュテーブルは、キーと値のペアを保存するデータ構造であり、キーの同一性を判断するためにeql?メソッドとhashメソッドを内部的に利用します。これにより、同じ値を持つが型が異なるキーが、ハッシュテーブル上で別々のキーとして扱われることを保証し、予期せぬ衝突やデータの不整合を防ぎます。
システムエンジニアを目指す上で、異なる等価性比較メソッドの特性を理解することは、適切なデータ構造の選択や、予期せぬバグの特定において非常に重要です。eql?メソッドは、値と型の両方が一致する厳密な等価性を求める場面で役立つメソッドと言えます。
構文(syntax)
11.eql?(1)
引数(parameters)
other
- other: 比較対象のオブジェクト
戻り値(return)
Boolean
数値が他のオブジェクトと厳密に等しい場合に真 (true) を返します。それ以外の場合は偽 (false) を返します。