【Ruby】クラスについて整理する
どうも、てーやまです。
クラスについても疎いです。なので整理します。
インスタンス変数
インスタンス変数はクラス(オブジェクト生成時のひな形)に持っている変数です。Rubyでは@付きで定義されます。
イニシャライザ
インスタンス作るときに必ず実行されるメソッドです。
#classを定義
class Fun
def initialize #イニシャライザ
@fun = 'music' #インスタンス変数
end
def fun
puts @fun
end
end
#Funクラスのインスタンスを生成
play = Fun.new
play.fun
#実行結果
music
=>nil
アクセサ
Rubyにはアクセサと呼ばれる機能があります。
インスタンス変数を変更したり、中身を参照するのに、全てのインスタンス変数にメソッドを作っていたのでは大変だからです。
アクセサを使うと次のようにclassを簡略化して書くことができます。
class Fun
attr_accessor :fun #アクセサ
end
play = Fun.new
#インスタンス変数funの中身を出力してみる
puts play.fun
#実行結果
=>nil
#インスタンス変数funの中身を変更してみる
play.fun = 'music'
puts play.fun
#実行結果
"music"
=>nil
#ちなみにインスタンス変数はインスタンスごと独立している
favorite = Fun.new
puts favorite.fun
#実行結果
=>nil
これはアクセサの場合、インスタンス生成時のイニシャライザはインスタンス変数にnilを入れていることが分かります。
またインスタンス変数は、インスタンスごとに値が違うことが分かります。
クラス変数
クラス変数はクラスで共有する変数です。
先の例のようにインスタンスが別れても、クラスで持ち回る値のため、変更されません。
クラス変数は@@を頭につけて表現されます。
class Sum
#クラス変数の定義
@@fix = 1
def watch
puts @@fix
end
def inc
@@fix += 1
end
end
#インスタンスを2つ生成
num1 = Sum.new
num2 = Sum.new
num1.watch
#実行結果
1
=>nil
num1.inc
=>2
#インスタンスを変えてクラス変数を参照してみる
num2.watch
#実行結果
2
=>nil
ディスカッション
コメント一覧
まだ、コメントがありません