LoginSignup
0
0

More than 3 years have passed since last update.

privateメソッド

Last updated at Posted at 2020-09-10

はじめに、前投稿でゲッターで得た値をインスタンス名.ゲッターメソッド名で出力可能ですと記述いたしましたが、
誤りでした、申し訳ありません。インスタンスの値が代入された、変数を用いる場合、変数.ゲッターメソッド名で出力致します。

以下、プライベートメソッドについての投稿です。

また、今回投稿するに当たって参考にさせて頂いたURLです。
ありがとうございました。
https://26gram.com/private-protected-in-ruby
https://qiita.com/kidach1/items/055021ce42fe2a49fd66

プライベートメソッドとはprivate以下の記述をクラス外から呼び出すことが出来ないというものです。

class Fruits

  private

  def name
    puts "りんご"
  end

end

apple = Fruits.new
apple.name
出力結果
 private method `name' called for #<Fruits:0x00007fe767832538> (NoMethodError)

この記述ですと、インスタンスメソッドがprivateより以下に記述されていますので、出力できません。
エラーが生じます。クラス外から、呼び出すことが出来ないからです。

また、次のような記述もエラーが生じます。

class Fruits

  apple.name 

  private

  def name
    puts "りんご"
  end

end

apple = Fruits.new
出力結果
undefined local variable or method `apple' for Fruits:Class (NameError)

では、どうすることが適切なのでしょうか。

private以上に以下の記述を呼び出すメソッドを定義しまして、
そのメソッドをクラス外から呼び出します。

class Fruits

  def info
    name
  end

  private

  def name
    puts "りんご"
  end

end

apple = Fruits.new
apple.info
出力結果
りんご

また、親クラスのプライベートメソッドは子クラスで呼び出すことも可能です。

class InfoFruits
  private

  def name
    puts "りんご"
  end

end

class Fruits < InfoFruits

  def info
    name
  end

end

apple = Fruits.new
apple.info
出力結果
りんご

最後に、親クラスのprivateメソッドであるゲッターを利用しまして、
その値を出力しています。


class InfoFruits

  private

  def name #ゲッター
    @name
  end

end

class Fruits < InfoFruits #実態のあるインスタンスは継承できませんが、定義されたインスタンスメソッドとインスタンス変数は用いることができます。

  def fruit_name(info_fruit_name)
    @name = info_fruit_name #インスタンス変数の定義
  end

  def info #プライベートメソッドnameを呼び出しています。
    name
  end

  def info_fruit
    puts "#{name}" #前投稿で**インスタンス名.ゲッターメソッド名**で出力可能と記述いたしましたが、
                   #誤りでした、すみません。インスタンスの値が代入された、変数を用いる場合は**変数.ゲッターメソッド名**で出力致します。
                   #今回、変数を用いていませんので、この形で出力が可能となります。
  end

end

apple = Fruits.new #インスタンスの生成
apple.info #プライベートメソッドを呼び出す為のメソッドを呼び出しています。
apple.fruit_name("りんご") #fruit_nameメソッドに引数を渡しています。

apple.info_fruit #info_fruitメソッドを呼び出しています。

出力結果
りんご

以上となります。

誤っている箇所、認識が不足している部分について、ご指摘頂ければ幸いに存じます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0