Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
先生と生徒の会話形式で理解しよう
生徒
「Rubyで数字や文字を比べるときに、==と===の違いがよくわかりません。」
先生
「それは重要な質問です。Rubyには複数の比較演算子があり、それぞれ用途や意味が少しずつ異なります。」
生徒
「他にも<=>やeql?があると聞きました。どう使い分けるんですか?」
先生
「では順番に見ていきましょう。初心者でも理解できるように、例を交えて解説します。」
1. ==(イコール)で値を比較する
==は最も基本的な比較演算子で、二つの値が等しいかどうかを判定します。整数や文字列など、値そのものが同じかを確認します。
puts 5 == 5 # true
puts 5 == 3 # false
puts "ruby" == "ruby" # true
true
false
true
ポイントは型が異なっても比較可能ですが、値が一致していない場合はfalseになります。
2. ===(ケース等価)でパターンマッチ
===は「ケース等価」と呼ばれ、主にcase文で使用されます。オブジェクトによって挙動が異なり、RangeやRegexpと組み合わせることが多いです。
case 5
when 1..10
puts "範囲内です"
end
範囲内です
このとき内部では (1..10) === 5 が評価されています。範囲に含まれているかどうかを確認する便利な演算子です。
3. <=>(スペースシップ演算子)で大小比較
<=> は「スペースシップ演算子」と呼ばれ、二つの値を比較して大小関係を返します。返り値は以下の通りです。
- -1:左が小さい
- 0:等しい
- 1:左が大きい li>nil:比較できない
puts 3 <=> 5 # -1
puts 5 <=> 5 # 0
puts 7 <=> 5 # 1
-1
0
1
この演算子はソートや順序判定に便利です。
4. eql?で型まで厳密に比較
eql?は値だけでなく型も一致しているかを確認する厳密な比較です。整数と浮動小数点は同じ数値でも別物として扱われます。
puts 5.eql?(5) # true
puts 5.eql?(5.0) # false
puts "ruby".eql?("ruby") # true
true
false
true
型まで厳密に確認したい場合はeql?を使うと安全です。
5. 比較演算子の使い分けまとめ
==:値だけ比較したいときに使用===:case文や範囲、正規表現とのパターンマッチに使用<=>:大小関係を知りたいとき、ソート時に使用eql?:値と型の両方を厳密に比較したいときに使用
用途に応じて正しく演算子を使い分けることで、意図しないバグを防ぎ、Rubyの数値や文字列の比較を安全に行えます。