7-4-3 メソッドの種類をおさえよう

publicメソッド

publicメソッドを定義するには、publicと記述し改行後にdefendで囲んでメソッドを記述します。

クラスにおけるメソッドは、種類に関する記述がなければデフォルトでpublicメソッド扱いとなります。

よって、特殊な場合を除きpublicの記述は省略可能です。

これまで「7-2-2 消費税額と税込み額を計算するクラスを定義しよう」などで確認してきたTaxCalculatorクラスのexecuteメソッドはpublicが省略されたpublicメソッドです。

privateメソッド

privateメソッドを定義するには、privateと記述し改行後にdefendで囲んでメソッドを記述します。

privateと記述された以降に定義されたメソッドは、すべてprivateメソッドとなります。

ただしprivateと記述された以降にpublicの記述がある場合は、privatepublicで囲まれたメソッドがprivateメソッドとして認識されます。

ただし読みやすさの観点から、publicメソッドはクラスの上の方に定義し、privateメソッドはクラスの下の方に定義することが推奨されます。

クラスメソッド

クラスメソッドを定義するには、メソッド定義を表すdef宣言の後にself.クラスメソッド名のように記述します。

Rubyにおいてselfには、自分自身を表す情報が代入されています。クラスメソッドの前のselfは、そのクラス自身をあらわします。

前ページ「7-4-2 色々なクラスのメソッドを使ってみよう」の例では、ClassMethodsクラスのcall_class_methodというクラスメソッドの前のselfClassMethodsクラス自身をあらわしているということです。

このように定義されたクラスメソッドは、クラス名.クラスメソッド名の形式で使用することができます。

また、別の記述方法として、class << selfendと囲まれた部分にdef クラスメソッドendとメソッドを記述することでクラスメソッドを定義することもできます。複数のクラスメソッドを記述する場合に、self.を省略して書くことができます。

メソッドの種類のまとめ

  • publicメソッドは、クラスのインスタンスから呼び出せる
  • privateメソッドは、クラス内部からのみ呼び出せる
  • クラスメソッドは、クラス名にドットを繋げてメソッドを記述することで呼び出せる