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 3 years have passed since last update.

[Ruby]変数の違いを理解していますか??

Posted at

はじめに

Rubyにはいくつもの変数の種類があります。
理解して使いこなすことが、開発レベルやコードの綺麗さが向上します。
スコープによって、いくつかの種類に分けられていますので、使いこなせるようにしましょう!

ローカル変数

最もスコープの狭い種類の変数。

スコープの範囲は、、、
・ブロック
・メソッド定義
・クラス、モジュール定義
・トップレベル

foo = 'foo'

def puts_foo
  puts foo #=> NameError
end

puts foo #=> 'foo'と表示

グローバル変数

非常に広いスコープを持つ変数。存在しないグローバル変数を指定するとnilを返す。
※可読性が下がる可能性があるため、あまり使用しない

スコープの範囲は、どこからでも参照可能です。

$foo = 'foo'
puts $bar #=> nil

定数

変化しない値を扱う変数。大文字で定義するのが慣習です。
※再代入すると、警告が出るが禁止はされていない。

FOO = 'FOO'

puts FOO #=> 'FOO'

def bar
  BAR = 'BAR' #=> 文法エラー
end

インスタンス変数

インスタンスの中でのみ参照できる変数。「@〜」から始まる変数。

class Ruler
  def length=(val)
    @length = val
  end

  def length
    @length
  end

ruler = Ruler.new
ruler.length = 30
ruler.length #=> 30

end

attr_accessorを利用することで、簡単に定義出来ます。

class Ruler
  attr_accessor :length



end

クラス変数

クラスとそのインスタンスをスコープとした変数。「@@〜」から始まる変数。

class Foo
  @@foo = 'foo'

  def foo
    puts @@foo
  end

  def self.foo
    puts @@foo
  end

foo_class = Foo.new

foo_class.foo #=> 'foo'
Foo.foo #=> 'foo'

終わりに

普段使うもの、あまり使わないもの、いろいろありますが知識として持っておくことで、使い分けが可能になります!

0
0
0

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?