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

【Rubyメモ】ローカル変数と、グローバル変数の違い。そしてグローバル変数を避けるべき理由

More than 1 year has passed since last update.

ローカル変数

ローカル変数には有効範囲があり、関数を飛び越えて使う事等は出来ません。
変数にはローカルとグローバルが存在しますが、一般的にただ"変数"として呼ばれるもののは多くはローカル変数みたいです。

例えば以下のプログラムでは一見すんなりと「3」が出力されそうなものですが、1を代入されたaはメソッド外で作られたローカル変数の為、外部のメソッドや関数では使う事が出来ないのです。
この場合 undefined local variable or method `a' for main:Object (NameError) というエラーが出ます。

a = 1

def test 
    b = 2
    puts a + b
end

test()

グローバル変数

ローカル変数は関数を飛び越えて使う事は出来ないのに対して、グローバル変数は自由にどこからでも使えます。
Rubyの場合関数名の前に$をつける事で、グローバル変数として扱う事が可能です。 この場合エラーも出ず正常に 3が出力されます。 しかし、グローバル変数は一般的に避けるべきだと言われています。

$a = 1

def test2
    b = 2
    puts $a + b
end

test2()

グローバル変数を避けるべき理由

まだ自分も理解を深められていませんが、多くはバグの温床になりやすい事にあるようです。 小規模なプログラミングを一人で行っている立場では、たかが変数と思い無駄にグローバル変数を増やしたところで、動作や実装にはそこまで問題ないと思います。 しかしこれがよりスペックの劣るサーバーかつ、複数人によって操作を行われる環境に置かれると、グローバル変数はどこからでも操作することが出来てしまいます。 これによって誤って他の関数から書き換えられてしまったり、変数名が被ってしまい正常な動作を行わなくなってしまう場合があるようなのです。

また厄介なのは、単なる構文の誤りとは別であるため、エラーメッセージが出ない場合があり、そうなると無数の変数からバグの原因を見つけなければなりません。

プログラムが、グローバル変数を使わなければ正常に動作しないような設計である場合は、そのプログラムを改めて見つめ直すべきだと感じます。 といってもついつい使ってしまうのですが・・・(反省)

hi_riku123
Ruby、Rails、HTML/CSS等をいじくる初心者です。 学習のアウトプットの為にQiitaを始めました。 記事には多々誤りがあるかと思います。 よろしくお願いします。
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
ユーザーは見つかりませんでした