2
1

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】クラス、メソッドの定義とインスタンス変数について

Last updated at Posted at 2021-03-14

はじめに

この記事は、Ruby/Railsの学習期間約1ヶ月の著者が書いたものです。
初投稿となりますので、誤った解釈があるかもしれません。その場合は、コメント等頂けますと幸いですm(_ _)m

今回は、Ruby学習中によく分からなくなりがちな、クラス、メソッドの定義、インスタンス変数について説明します。

独自のクラスを定義する

まず、Rubyではクラスを定義します。
クラスとは、設計図のようなもので、classから始まり、endで終わります。

クラス名は、ClassNameというように、単語の先頭を大文字で定義します。
ラクダのコブのようであることから、CamelCaseと表現します。

class.rb

#クラスの定義
class ClassName
end

クラスにメソッドを定義する

クラスの設計図の中にメソッドを定義することで、そのクラス独自が持っているメソッドとして認識されます。

メソッドとは、何らかの処理を示しており、処理内容をdefendで囲みます。
メソッド名は、method_nameのように2単語目以降は、アンダーバーで示しますので注意しましょう。
(このことを蛇に例えて、snake_caseと呼びます。)

method.rb

#メソッドの定義
class ClassName
  def method_name
  # メソッドの処理を書く
  end
end

#クラスのインスタンスを作成し、メソッドで呼び出す
instance = ClassName.new
instance.method_name

Rubyのオブジェクトは何らかのメソッドを持っていて、そのメソッドを定義することで、処理を返してくれるようになります。

ローカル変数とインスタンス変数について

次に、ローカル変数とインスタンス変数の違いを見てみましょう。

###ローカル変数

ローカル変数は、使い回しできる範囲が他の変数よりも限られています。
例えば、メソッド内で定義した場合は、そのメソッド内でしか使えず、同じクラス内であっても使い回しができません。

試しに、以下のローカル変数messageを、say_morningのメソッドの処理として定義し、
say_good_morningのメソッド内で使い回してみましょう。

local_variable.rb
class Greeting
  def say_morning
    message = "morning!"
    puts message
  end

  def say_good_morning
    puts "Good #{message}"
  end
end

instance = Greeting.new
instance.say_morning
instance.say_good_morning

以下のようなエラーが出てしまいました。

`say_good_morning': undefined local variable or method `message' for #<Greeting:0x00007fe5b1984038> (NameError)

つまり、say_good_morningのメソッドの中で、messageというローカル変数やメソッドは定義されてませんよ、と言っているわけです。
このように、ローカル変数は、あるメソッド内で定義した変数は、他のメソッド内で使い回すことができません。

###インスタンス変数

一方、インスタンス変数とは、同じオブジェクト内(同クラス内)で使い回せる変数のことをいいます。
変数の先頭に@をつけて定義します。

先程のローカル変数messageを、インスタンス変数@messageに置き換えて見てみましょう。

instance_variable.rb
class Greeting
  def say_morning
    @message = "morning!"
    puts @message
  end

  def say_good_morning
    puts "Good #{@message}"
  end
end

instance = Greeting.new
instance.say_morning
instance.say_good_morning

結果は以下の通り。

morning!
Good morning!

欲しい結果が出ましたね!
つまり、インスタンス変数とは、同じクラス内であれば、異なるメソッド内であっても何度でも使い回せる変数である、ということが証明されました。

##おわりに

今回はRubyの基本であるクラス、メソッドの定義とローカル変数とインスタンス変数の違いについて、説明しました。
今後も、Ruby/Railsを学習する上で、皆様に有益な情報を発信できればと思いますので、良ければLGTMお願いします。

##参考記事

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

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?