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

ローカル変数・インスタンス変数・クラス変数の違い(Ruby)

More than 1 year has passed since last update.

各変数の使い方が分からなかったので備忘録として記します。
間違い等ありましたら、コメントいただけると嬉しいです!

ローカル変数

ローカル変数は、使用できる範囲(スコープ)が他の変数よりも限られている。
メソッドやブロック内で変数を定義した場合は、そのメソッドやブロック内で有効となる。
定義は、メソッド、ブロック内外で可能。
メソッド内(ブロック内)で使用できる変数。

ローカル変数
 class Person
  def greeting(name)
    personal_name = name             ←ローカル変数の定義
    "My name is #{personal_name}"
  end
 end

 person = Person.new('Taro')
 person.greeting  
 #=> "My name is Taro" 

注意点: メソッド内でローカル変数を定義した場合は、そのメソッド内で=を使用して引数を代入しないと、エラーが帰ってくる。(下記のような感じ!)

error-example
 class Person
   def initialize(name)
     personal_name = name
   end

   def greeting
     "My name is #{personal_name}"
   end
 end

 person = Person.new('Taro')
 person.greeting
 #=> Name error: undefined local variable or method "personal_name"・・・・

インスタンス変数

同じオブジェクト内(同クラス内)で共有可能な変数のこと
変数名に「@」をつける

インスタンス変数
 class Person
   def initialize(name)
     @personal_name = name         ←インスタンス変数の定義
   end

   def greeting
     "My name is #{@personal_name}"
   end
 end
 person = Person.new('Taro')
 person.greeting  
 #=> "My name is Taro" 

クラス変数

同じクラス内の全てのインスタンスメソッド内や継承されたクラス内(そのインスタンスメソッド内)で使用できる変数
変数名に「@@」をつける

クラス変数
 class Person                           
   @@personal_name = 'Taro'            ←クラス変数の定義

   def greeting
     @@personal_name
   end
 end

 class Personname < Person
   def name
     @@personal_name
   end
 end

 person = Person.new
 personname = Personname.new

 person.greeting  
 #=> "Taro" 

 personname.name
 #=> "Taro" 
mary_new_programmer
Ruby, RubyonRails, JavaScript, jQuery, HTML/CSS, PHP 勉強中
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
ユーザーは見つかりませんでした