0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

x | |= 1 (自己代入)について

Last updated at Posted at 2022-10-19

環境

Ruby2.6

はじめに

x ||= 1のような書き方をすることを、自己代入と呼びます。他言語からRubyに移った人から見れば、パッと見ただけでは、「何をやっているのだろう?」と思うものです。ググってみると、変数の値が下記の場合、右辺の値(この場合1)をセットするとあります。

  • nil
  • false
  • 変数が定義されていない

3パターンに当てはまらない場合は、変数が現時点で保持している値を、そのまま維持し続けることになります。つまり、1に変換されません。

動作確認

x変数が未定義の場合、右辺の1を返します。x変数が未定義ということは、ロジックの上位個所で、x変数がまだ一度も現れていないということになります。x変数を始めて定義して、初期値に1をセットしたことと同じ意味になります。つまり、x = 1と同じです。

test.rb
x ||= 1         # => 1

x変数に、nil or falseがセットされている場合、1に置き換えるという意味になります。

test.rb
x = nil
x ||= 1         # => 1

x = false
x ||= 1         # => 1

nilと "" は別物です。nilの場合は1に置き換えても、""の場合は1に置き換えません。falseの場合は1に置き換えても、trueの場合は1に置き換えません。Boolean型とその他の型をごっちゃに考えること自体、混乱の元のような気がしますが・・・。

test.rb
x = ""
x ||= 1         # => ""

x = true
x ||= 1         # => true

このように、文字列型、整数型は、当然、1に置き換えません。本来保持している元の変数が、そのまま有効になります。

test.rb
x = "aa"
x ||= 1         # => "aa"

x = 1
x ||= 1         # => 1

x = 0
x ||= 1         # => 0
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?