Rubyの===演算子についてまとめてみた

こんにちは、hachi8833です。

前回の週刊Railsウォッチrescueの項で扱った、Rubyの===演算子の動作を以下にまとめてみました。

Rubyの===演算子について

左辺が単独のStringやIntegerオブジェクトの場合
==と同じ動作
左辺がClassオブジェクトの場合:
右辺がそのクラスのインスタンスであるかどうかを比較する
左辺がRegexオブジェクトの場合:
右辺とマッチするかどうかを取れる

前回と同じ記事「Rescue’s Elegant Trick for Knowing Which Exceptions to Catch」のコードがわかりやすいので、再度引用します。

(1..10) === 5             # true
('a'..'f') === "z"        # false

String === "hello"        # true
String === 1              # false

/[0-9]{3}/ === "hello123" # true
/[0-9]{3}/ === "hello"    # false

公式ドキュメントには以下の記述があります。

特殊な等号演算子。Object#===での説明:「このメソッドは case 文での比較に用いられます。 デフォルトはObject#==と同じ働きをしますが、 この挙動はサブクラスで所属性のチェックを実現するため 適宜再定義されます」。たとえば、Range#===はotherが範囲内に含まれている時に真を返します。
Rubyで使われる記号の意味: ===より

参考: JavaScriptの===との違い

Rubyのトリプルイコール演算子===は、Rubyの通常の==演算子よりフレキシブルな、見方を変えればゆるい演算子です。

一方、以下のようにJavaScriptの厳密等価演算子である===は、等価演算子==より厳密な比較(型を変換しない比較)を行います。

同価演算子(===!==
型を変換せずに厳密に比較する
等価演算子(==!=
型が異なる場合は変換してから上の同値比較を行う
Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ