.net column

.NET開発者のためのブログメディア

Rubyの文字列比較とは?詳しい内容をご紹介!

2020年07月13日

SE
Rubyの文字列比較で使用する演算子を使いこなせるようになりたいです。

PM
見た目が似ている演算子があるので、しっかりと覚えていきましょう。

Rubyの文字列比較

今回は、Rubyでの文字列比較について説明します。Rubyの文字列比較には様々な演算子が用意されており、用途に応じて使い分ける必要があります。

見た目が似ている演算子もあるので、初心者は混乱しやすいかもしれません。Rubyの文字列比較に興味のある方はぜひご覧ください。

比較のための演算子

Rubyの文字列比較には、「等号比較演算子」または「不等号比較演算子」を使用します。

等号比較演算子は、文字列が等しいか否かを判断する演算子で、「==」・「===」・「eql?」・「equal?」の4つがあります。不等号比較演算子は、文字列の大小を判断する演算子で、「<」・「>」・「<=」・「>=」の4つがあります。

文字列比較について、以下で詳しく説明していきます。

等号比較演算子「==」

Rubyの等号比較演算子「==」は、文字列の「値」が一致しているか否かを判断します。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

str1とstr2の値””hoge””が一致しているので、「==」演算子はtrueを返します。また、「==」の否定は「!=」です。変数と文字列を直接比較することもできます。

このように、等号比較演算子「==」は、文字列の「値」が一致しているか否かを判断します。

等号比較演算子「===」

Rubyの等号比較演算子「===」については、以下の使い方があります。
・「==」と同じ
・case文で暗黙的に使用される比較演算子
・インスタンスの判断
・範囲オブジェクトの判断
・正規表現オブジェクトの判断

以降の章で詳しく説明していきます。

「==」と同じ

演算子の左辺が文字列や数字の場合、先ほど説明した「==」と同じ判断をします。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

値が一致しているか否かを判断しているので、「==」と同じです。
また、「===」の否定演算子はありません。if-elseもしくはunlessで否定側のロジックを作成してください。

case文で暗黙的に使用される比較演算子

「===」は、case文で暗黙的に使用される比較演算子です。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

ここでは、内部的にstr1 === “”hoge””が実行されています。
このように、「===」は、case文で暗黙的に使用される比較演算子です。

インスタンスの判断

「===」の左辺がクラスオブジェクトの場合、右辺がそのインスタンスであるか否かを判断します。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

str1はStringクラスのインスタンスなので、「===」はtrueを返します。
また、str1はIntegerクラスのインスタンスではないので、falseを返します。

このように、「===」の左辺がクラスオブジェクトの場合、右辺がそのインスタンスであるか否かを判断します。

範囲オブジェクトの判断

「===」の左辺が範囲オブジェクトの場合、右辺がその範囲に含まれているか否かを判断します。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、「===」の左辺が範囲オブジェクトの場合、右辺がその範囲に含まれているか否かを判断します。

正規表現オブジェクトの判断

「===」の左辺が正規表現オブジェクトの場合、右辺がその正規表現に一致するか否かを判断します。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、「===」の左辺が正規表現オブジェクトの場合、右辺がその正規表現に一致するか否かを判断します。

等号比較演算子「eql?」

Rubyの等号比較演算子「eql?」は、「==」と同じ判断をします。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように「eql?」は、「==」と同じ判断をします。

同じなのになぜ「eql?」演算子が存在するのでしょうか?
「eql?」の存在意義は、可読性の向上です。
また、「==」で比較しようとして誤って「=」で代入してしまうことを防ぐために、「eql?」で比較しても良いでしょう。
このあたりは開発チーム内でコーディング規約があれば従ってください。

等号比較演算子「equal?」

Rubyの等号比較演算子「equal?」は、オブジェクトが一致しているか否かを判断します。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように「equal?」は、文字列が一致しているかではなく、オブジェクトが一致しているか否かを判断します。

不等号比較演算子

Rubyの文字列比較に使用する不等号比較演算子は、以下の4つがあります。
・小なり演算子 < ・大なり演算子 >
・以下演算子 <= ・以上演算子 >=

文字列の不等号比較演算子は、辞書で先に出てくるか否かを判断します。
例えば、「””a””の方が””b””よりも先に出てくる」「””a””の方が””A””よりも先に出てくる」などです。
先に出てくるほうが小さい値として判断されます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、Rubyにおける文字列の不等号比較演算子は、辞書で先に出てくるか否かを判断します。

SE
演算子の例を並べて説明してくださったので、わかってきました。

PM
実際に書いてみて、用途に応じた使い分けができるようにしておきましょう。

Rubyの文字列比較について理解しよう

いかがでしたでしょうか。Rubyの文字列比較には、等号比較演算子や不等号比較演算子があり、用途に応じて使い分ける必要があります。

文字列比較して値が一致しているか、オブジェクトが一致しているか、範囲に含まれているか、正規表現に一致するか、など様々な文字列比較ができます。

「==」と「===」、「eql?」と「equal?」など、見た目が似ている演算子があるので注意が必要です。ぜひご自身でソースコードを書いて、文字列比較についての理解を深めてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)