ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

Rubyのor equal演算子の使い方

Rubyには、以下のような書き方があるらしいです。

a ||= b

これはor equal演算子と呼ぶらしいのですが、これについて動きなどを調べてみたのでメモします。

or equal演算子について

コード例

以下のコードについて、or_equal(name)の部分がそれにあたります。 これはつまり、インスタンス変数@nameが存在すればそれを返し、なければ引数のnameを返す、という動きになります。

class Foo
  def name=(name)
    @name = name
  end

  def or_equal(name)
    @name ||= name
  end
end

インスタンス変数がない場合

name=(name)インスタンス変数を生成しない場合、そのままor_equal(name)の引数が返ります。

foo = Foo.new
p foo.or_equal('foo') # => "foo"

インスタンス変数がある場合

name=(name)インスタンス変数を生成した場合、or_equal(name)の引数によらず、@nameが返されます。

foo.name = 'bar'
p foo.or_equal('foo') # => "bar"

おわりに

使い方が分かりやすいですし、使いこなせればコードがシンプルになると思うので、積極的に使っていこうと思います。 まずはコードを書く時間を確保しよう。。。