Help us understand the problem. What is going on with this article?

代入なしでローカル変数を宣言するトリビア

More than 1 year has passed since last update.

はじめに

この記事は書籍「プロを目指す人のためのRuby入門」に掲載できなかったトピックを著者自らが紹介するアドベントカレンダーの3日目です。
本文に出てくる章番号や項番号は書籍の中で使われている番号です。

今回は代入なしでローカル変数を宣言するトリビアを紹介します。

必要な前提知識

「プロを目指す人のためのRuby入門」の第2章まで読み終わっていること。

代入なしでローカル変数を宣言するトリビア

2.2.8項でも説明したとおり、ローカル変数は事前に何かしらの値を代入する必要があります。

# 変数を宣言する目的で変数名だけ書くと、エラーになる
x #=> NameError: undefined local variable or method `x' for main:Object

# 変数を宣言するには何かしらの値を代入する必要がある
x = nil

ただし、厳密に言うと、必ずしも代入が行われている必要はありません。次のコードを見てください。

if false
  # このコードは絶対に実行されない
  x = 123
end

# 代入は実行されていないが、xを参照してもエラーにはならない
x #=> nil

ご覧のとおり、代入は実行されていませんが、xを参照してもエラーにはなりません。

なので、厳密に言えば、

Rubyでは実際に代入が実行されるかどうかにかかわらず、代入を行うコードが存在すれば、その時点でローカル変数を宣言したことになる(代入が実行されなかった場合の初期値はnil

ということになります。

ですが、上で示したようなコードは実際に使うと混乱の元になるので、通常は使うべきではありません。ローカル変数には必ず明示的に値を設定するようにしましょう。

参考文献

ローカル変数 | docs.ruby-lang.org

次回予告

次回は自分が書いたRubyプログラムをirb上で読み込む方法を紹介します。

jnchito
SIer、社内SEを経て、ソニックガーデンに合流したプログラマ。 「プロを目指す人のためのRuby入門」の著者。 http://gihyo.jp/book/2017/978-4-7741-9397-7 および「Everyday Rails - RSpecによるRailsテスト入門」の翻訳者。 https://leanpub.com/everydayrailsrspec-jp
https://blog.jnito.com/
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした