メソッドのアクセス制限(public,private,protected)
クラス内に定義されたメソッドは、クラスから作成されたインスタンスから呼び出すことができます。ただ場合によってはクラス内の他のメソッドから実行されるだけのメソッドを定義したい場合もあります。このような場合はメソッドがどこからアクセス可能なのか設定を行うことができます。ここでは Ruby でクラスで定義したメソッドのアクセス制限を行う方法について解説します。
(Last modified: )
アクセス制限の設定方法
クラス内に定義したメソッドへのアクセスを制限する場合、インスタンスからインスタンスメソッドとして呼び出し可能なメソッドには public
、クラス内の他のメソッドからのみ呼び出し可能なメソッドには private
を使って次のようにクラス内に記述します。
他に protected
が用意されています。 private
に近いものですが、どのように使うべきものなのか理解ができていないのでここでは説明を省略させて頂きます。
public: メソッド名 private: メソッド名 protected: メソッド名
メソッドに対するこの記述は対象のメソッドが定義されたあとで記述する必要があります。
では具体的なサンプルを使って確認していきます。
class Car def accele print("アクセルを踏みました\n") end def brake print("ブレーキを踏みました\n") end end
「Car」クラス内で定義された「accele」メソッドと「brake」メソッドはどちらも「Car」クラスのインスタンスから呼び出し可能としたいので public
を指定します。なお特に指定しない場合は public
が設定されているとみなされるため、 public
の場合は明示的に指定しなくても構いません。
class Car def accele puts("アクセルを踏みました") end public :accele def brake puts("ブレーキを踏みました") end public :brake end car = Car.new car.accele car.brake
これで「accele」メソッドと「brake」メソッドは public
なメソッドとなりました。
では次に private
なメソッドを作成してみましょう。
class Car
def accele
puts("アクセルを踏みました")
speedChange
end
public :accele
def brake
puts("ブレーキを踏みました")
speedChange
end
public :brake
def speedChange
puts("スピードが変わりました")
end
private :speedChange
end
car = Car.new
car.accele
car.brake
新しいメソッド「speedChange」を記述し、 private
として設定しました。このメソッドはクラス内の他のメソッドからのみ呼び出すことができます。
private
に設定されたメソッドに対して、クラスのインスタンスから呼び出そうとするとエラーとなります。例えば次のような記述は行えません。
car = Car.new
car.accele
car.speedChange
initializeメソッドの扱い
通常のメソッドは特に指定しない場合は public
となりますが initialize
メソッドだけは常に private
メソッドとして定義されます。よって initialize
メソッドをクラスのインスタンスから呼び出すことはできません。
※ initialize
メソッドについては「initializeメソッドの使い方」を参照されてください。
では実際にサンプルを試してみます。
# encoding: UTF-8 class Car def accele puts("アクセルを踏みました") speedChange end public :accele def brake puts("ブレーキを踏みました") speedChange end public :brake def speedChange puts("スピードが変わりました") end private :speedChange end car = Car.new car.accele car.brake
上記を実行すると次のように表示されます。
-- --
Ruby でクラスで定義したメソッドのアクセス制限を行う方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。