はじめに
この記事は、Ruby/Railsの学習期間約1ヶ月の著者が書いたものです。
初投稿となりますので、誤った解釈があるかもしれません。その場合は、コメント等頂けますと幸いですm(_ _)m
今回は、Ruby学習中によく分からなくなりがちな、クラス、メソッドの定義、インスタンス変数について説明します。
独自のクラスを定義する
まず、Rubyではクラスを定義します。
クラスとは、設計図のようなもので、class
から始まり、end
で終わります。
クラス名は、ClassName
というように、単語の先頭を大文字で定義します。
ラクダのコブのようであることから、CamelCase
と表現します。
#クラスの定義
class ClassName
end
クラスにメソッドを定義する
クラスの設計図の中にメソッドを定義することで、そのクラス独自が持っているメソッドとして認識されます。
メソッドとは、何らかの処理を示しており、処理内容をdef
とend
で囲みます。
メソッド名は、method_name
のように2単語目以降は、アンダーバーで示しますので注意しましょう。
(このことを蛇に例えて、snake_case
と呼びます。)
#メソッドの定義
class ClassName
def method_name
# メソッドの処理を書く
end
end
#クラスのインスタンスを作成し、メソッドで呼び出す
instance = ClassName.new
instance.method_name
Rubyのオブジェクトは何らかのメソッドを持っていて、そのメソッドを定義することで、処理を返してくれるようになります。
ローカル変数とインスタンス変数について
次に、ローカル変数とインスタンス変数の違いを見てみましょう。
###ローカル変数
ローカル変数は、使い回しできる範囲が他の変数よりも限られています。
例えば、メソッド内で定義した場合は、そのメソッド内でしか使えず、同じクラス内であっても使い回しができません。
試しに、以下のローカル変数message
を、say_morning
のメソッドの処理として定義し、
say_good_morning
のメソッド内で使い回してみましょう。
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
に置き換えて見てみましょう。
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お願いします。
##参考記事