【Ruby3.x】Data::eql?()メソッドの使い方
eql?メソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
eql?メソッドは、Dataクラスのインスタンスが厳密に等しいかどうかを判断するメソッドです。Ruby 3系で導入されたDataクラスは、変更不可能な値オブジェクトを簡単に作成するための機能を提供します。このeql?メソッドは、二つのDataオブジェクトが、保持しているデータの型、値、そして順序まですべてにおいて完全に一致する場合にのみtrueを返します。
通常の等価比較を行う==メソッドとは異なり、eql?メソッドは型変換を行わず、異なる型のオブジェクトを比較した場合は、たとえ見た目の値が同じであってもfalseを返します。例えば、整数1と浮動小数点数1.0は==では等しいと判断されることがありますが、eql?では通常異なるオブジェクトとして扱われfalseを返します。Dataクラスのインスタンス間の比較においては、内包するすべての要素がeql?で等しい場合にのみ、全体として等しいと判断されます。
この厳密な比較は、ハッシュのキーとしてDataオブジェクトを使用する際に非常に重要です。ハッシュはキーの一意性を保証するために、通常eql?メソッドとhashメソッドを利用します。これにより、まったく同じデータを持つDataオブジェクトだけが同一のキーとして扱われ、意図しないキーの衝突や重複を防ぐことができます。Dataクラスが値オブジェクトの表現に適しているのは、このeql?メソッドによる厳密な等価性判定が内部で提供されているためです。
構文(syntax)
1User = Data.define(:id, :name) 2user1 = User.new(id: 1, name: "Alice") 3user2 = User.new(id: 1, name: "Alice") 4 5user1.eql?(user2)
引数(parameters)
other
- other: 比較対象のオブジェクト
戻り値(return)
Boolean
2つのオブジェクトが、値だけでなく型も全く同じ場合に真(true)を返します。それ以外の場合は偽(false)を返します。