LoginSignup
0
0

More than 3 years have passed since last update.

Ruby独特の代入演算子 ||= の意味について説明してみた

Posted at

代入演算子とは

Rubyも含め、多くのプログラミング言語では、x1を加算する操作を以下のように記述1できます。

x = x + 1

この操作は、Ruby(ほか多くのプログラミング言語)において、以下のような短縮表記が可能です。

x += 1

このときの+=という演算子、並びに加算以外の演算に対して同様の動作を行うように定義された演算子を総称して「代入演算子」と呼びます。

+=以外の代入演算子

Rubyにおいては、+=以外の代入演算子としては以下のようなものが存在します。

# rails console
>> x = 1
=> 1
>> x += 1
=> 2
>> x *= 3
=> 6
>> x -= 8
=> -2
>> x /= 2
=> -1

||=という演算子の意味

一般的な代入演算子と異なり、こちらはRuby独特の代入演算子です。例えば以下のような形で使われます。

# rails console
>> @foo = nil
=> nil
>> @foo ||= "bar"
=> "bar"

上記のコードの意味は、下記のコードの意味と同じです。

# rails console
>> @foo = nil
=> nil
>> @foo  = @foo || "bar"
=> "bar"

その動作は以下の通りです。

  • 実行時点で左辺の変数がtrueと評価される場合
    • 代入は行わない
    • 右辺の式は評価しない
  • 実行時点で代入先の変数がfalseと評価される場合
    • 右辺の式を評価する
    • 右辺の式の評価結果を左辺の変数に代入する

Rubyにおいては、「変数の値がnilであれば変数に代入するが、nilでなければ代入しない」という操作が頻繁に登場します。同じくRubyの特徴である「falsenil以外の全てのオブジェクトは、真偽値として評価した場合、常にtrueとして評価される」という特徴と合わせて、このような場合に||=という演算子の存在が非常に便利なのです。


  1. なお、Ruby以外の言語では、x = x + 1x++と表記できるものがあります。こうした使い方をする++を「インクリメント演算子」と呼びます。しかしながら、Rubyではx++のような表記を使うことはできません。 

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0