【クラスのメソッド定義】Rubyの基礎【学習】

Ruby
スポンサーリンク

インスタンスメソッド・インスタンス変数

インスタンスメソッドはオブジェクトから呼び出したり、同じクラス内の別メソッドから呼び出すことができます。

class User
  attr_accessor :name, :birthday

  def initialize(name, birthday)
    @name = name
    @birthday = birthday
  end

  #インスタンスメソッド
  def display_birthday
    #インスタンス変数
    @birthday.strftime('西暦%Y年 %m月 %d日')
  end

  def call_display_birthday
    #インスタンスメソッドはクラス内の別のメソッドから呼び出すことができる。
    self.display_birthday
    display_birthday
  end
end

birthday = Date.new(1999, 11, 11)
user = User.new('nabe', birthday)
puts user.display_birthday
puts user.call_display_birthday

アクセス修飾子

アクセス修飾子には以下の3つがあります。

  • publicメソッド
  • privateメソッド
  • protectedメソッド

publicメソッド

以下の例の「display_birthday」のように単純にクラス内に定義したメソッドはpublicメソッドになります。

publicメソッドはオブジェクトから直に呼び出すことができます。
また、自身のオブジェクトを呼び出す際に、先頭に「self」をつけますが、省略もできます。

require 'date'

class User
  attr_accessor :name, :birthday

  def initialize(name, birthday)
    @name = name
    @birthday = birthday
  end

  #インスタンスメソッド(publicメソッド)
  def display_birthday
    @birthday.strftime('西暦%Y年 %m月 %d日')
  end

  def call_display_birthday
    #自身のオブジェクトを呼び出す場合は先頭に「self」をつける(publicメソッドの呼び出し)
    self.display_birthday
    #「self」を省略することもできる(publicメソッドの呼び出し)
    display_birthday
  end
end

birthday = Date.new(1999, 11, 11)
user = User.new('nabe', birthday)
puts user.display_birthday
puts user.call_display_birthday

privateメソッド

クラス外部には公開されないメソッドでクラス内のメソッドから呼び出して使われるメソッドになります。

「private」以下に記載し、呼び出す際は「self」をつけない関数形式で呼び出します。

require 'date'

class User
  attr_accessor :name, :birthday

  def initialize(name, birthday)
    @name = name
    @birthday = birthday
  end

 def call_private_name
    #同じクラス内では呼び出せる
    #「self」をつけては呼び出せない
    private_name
  end

  private

  def private_name
    @name
  end
end

birthday = Date.new(1999, 11, 11)
user = User.new('nabe', birthday)
#クラス外では呼び出すとエラーになる
puts user.private_name

protectedメソッド

基本的に「private」メソッドと同様にクラス外部には公開されないメソッドでクラス内のメソッドから呼び出して使われるメソッドになります。

ただ、「protected」の場合は「self」をつけて呼び出すことができます。

class User
  def uesr_method
    protected_method
    self.protected_method

    private_method
    self.private_method
  end

  protected

  def protected_method
    puts 'protected'
  end

  private

  def private_method
    puts 'private'
  end
end

user = User.new
user.uesr_method
->
protected
protected
private
NoMethodError: private method `private_method' called for #<User:0x00007fc0cca622e8>
Did you mean?  private_methods
from (pry):7:in `uesr_method'

破壊的メソッド

メソッドの末尾に「!」をつけたものは破壊的メソッドと呼ばれるものになります。

破壊的メソッドを使用すると、レシーバーの値を変更するメソッドになります。

以下の例を見ていただくと、「str.upcase!」の場合では戻り値だけでなく「str」の値も変更されていることがわかると思います。

[5] pry(main)> str = 'string'
=> "string"
[6] pry(main)> str.upcase
=> "STRING"
[7] pry(main)> str
=> "string"
[8] pry(main)> str
=> "string"
[9] pry(main)> str.upcase!
=> "STRING"
[10] pry(main)> str
=> "STRING"

フリーランスを目指すなら【テックパートナーズカレッジ】

未経験者向けWEBスクール【SHElikes】

コメント