目次
開発環境
- Ruby version: ruby 3.1.2
Rubyの比較演算子とは
Rubyの比較演算子とは、左辺と右辺を比べる演算子式です。
「大なり」「小なり」「等しい」「等しくない」などを比較した結果として「true」または「false」を返します。
公式リファレンス:https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html
Rubyの比較演算子の書き方
Rubyの比較演算子の書き方は下記になります。
1 | 左辺 比較演算子 右辺 |
比較演算子の一覧
左辺と右辺を比べる定義されている比較演算子の一覧は下記となります。
1 2 3 4 5 6 | a == b # a と b が等しい a != b # a と b が等しくない a < b # a が b よりも小さい a > b # a が b よりも大きい a <= b # a が b 以下である a >= b # a が b 以上である |
左辺と右辺のオブジェクトが持つ数値や文字列を比較し、等しいか等しく無いか、また大きいか小さいかなどを比較した結果として「true」または「false」を返します。
上記以外にも「<=>」という比較演算子があります。
1 | a <=> b # aがbより大きいときは-1、等しければ0、bがaより大きいときは1、比較できないときはnil |
左辺と右辺を比較するのは他の比較演算子と同様ですが、左辺と右辺の比較結果を数値で返します。
また、少し特殊な比較演算子「===」があります。
1 | puts a === b # aのオブジェクトとbが同等性がある |
「===」演算子は「==」と同じですが、case文で暗黙的に使用される比較演算子であり、オブジェクトの同等性を比較する演算子です。
例えば、数値オブジェクト、範囲オブジェクト、正規表現オブジェクト、文字列オブジェクト、インスタンスであるかどうかなどが判断されます。
Rubyの比較演算子の優先順位
Rubyの演算子には優先順位があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | (優先順位が高い) :: [] +(単項) ! ~ ** -(単項) * / % + - << >> & | ^ > >= < <= <=> == === != =~ !~ && || .. ... ?:(条件演算子) =(+=, -= ... ) not and or (優先順位が低い) |
1つの式の中で複数の演算が行われるとき、式の各部分は一定の順序に従って評価されます。
例えば、論理演算子で使用される否定の「!」は比較演算子の「> >= < <=」や「<=> == === !=」などより優先順位が高く評価されます。
例えば、下記のようなコードで変数の値が「10より大きいか」どうかを比較し、その結果を「!」演算子を使用して否定する場合を考えてみます。
1 2 3 4 5 | num = 5 if !num > 10 puts "10以下です" end |
上記は変数「num」には「5」が入ってるため「!num」はfalseとなります。
そうするとfalseが10より大きいかを比較演算子で調べようとしますが、falseの元のクラスであるFalseClassには「>」メソッドが無いためエラーとなってしまいます。
このような場合は先に評価を行わせたい部分を括弧 () で括ることで、意図したとおりの順序で演算子による演算が行われるようにします。
1 2 3 4 5 | num = 5 if !(num > 10) puts "10以下です" end |
上記の場合は、まずは括弧で括られた変数「num」が10よりも大きいかを比較演算子で調べた結果はfalseとなります。
そして、その結果に対して否定演算子「!」による演算が行われので式全体はtrueとなります。
このように演算子には優先順位があるため、他の演算子と組み合わせた場合、想定した通りの動作にならない場合もあるので注意しましょう。
Rubyの比較演算子の使い方
Rubyの論理演算子の使い方について、「等しい(==)、等しくない(!=)」「大なり(>)、小なり(<)」「以上(>=)、以下(<=)」「<=>」「===」について解説していきます。
等しい(==)、等しくない(!=)の使い方
等しい(==)、等しくない(!=)の使い方について、サンプルコードです。
1 2 3 4 | puts 100 == 100 # => true puts 100 == 200 # => false puts 100 != 200 # => true puts 100 != 100 # => false |
等しい(==)という比較演算子は左辺と右辺が一致している場合はtrue、一致していない場合はfalseとなります。
等しくない(!=)という比較演算子は左辺と右辺が一致していない場合はtrue、一致している場合はfalseとなります。
大なり(>)、小なり(<)の使い方
大なり(>)、小なり(<)の使い方について、サンプルコードです。
1 2 3 4 | puts 100 > 99 # => true puts 100 > 100 # => false puts 100 < 101 # => true puts 100 < 100 # => false |
大なり(>)という比較演算子は左辺が右辺より大きい場合はtrue、小さい場合はfalseとなります。
逆に小なり(<)という比較演算子は左辺が右辺より小さい場合はtrue、大きい場合はfalseとなります。
以上(>=)、以下(<=)の使い方
以上(>=)、以下(<=)の使い方について、サンプルコードです。
1 2 3 4 | puts 100 >= 100 # => true puts 100 >= 101 # => false puts 100 <= 100 # => true puts 100 <= 99 # => false |
以上(>=)という比較演算子は左辺が右辺以上である場合はtrue、そうでない場合はfalseとなります。
逆に以下(<=)という比較演算子は左辺が右辺以下である場合はtrue、そうでない場合はfalseとなります。
「<=>」演算子の使い方
「<=>」演算子の使い方について、サンプルコードです。
1 2 3 4 | puts 100 <=> 99 # => 1 puts 100 <=> 100 # => 0 puts 100 <=> 101 # => -1 puts 100 <=> "100" # => nil |
左辺と右辺を比較するのは他の比較演算子と同様ですが、左辺が右辺より大きい場合は1、等しい場合は0、右辺が左辺より大きい場合は-1、比較できないときはnilとなります。
「===」演算子の使い方
「===」演算子の使い方について、サンプルコードです。
1 2 3 4 5 6 7 8 | puts 1 === 1 # => true puts "Ruby" === "Ruby" # => true puts (1..100) === 10 # => true puts /[a-z]/ === "c" # => true puts String === "Ruby" # => true puts Numeric === 10 # => true puts Integer === 10 # => true puts Symbol === :Ruby # => true |
「===」演算子は「==」と同じですが、case文で暗黙的に使用される比較演算子であり、オブジェクトの同等性を比較する演算子です。
他の言語にある「===」のような厳密な比較演算子ではないため、注意しておきましょう。
おわりに
Rubyの比較演算子の使い方を解説してきました。
if文などの条件式と組み合わせて使用されることが多いですが、比較演算子は非常に広い範囲に渡って使用することができるため、プログラミングにおいては欠かせないほどです。
単一条件や複数条件など比較したい条件に合わせて自由に使い分けることができるようにしていきましょう。