2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

メソッドのアクセスを制限

2
Last updated at Posted at 2015-07-29

メソッドには処理が書かれていなければならない。書いてないのは文法的にout
publicメソッド クラスの内部、外部から呼び出せるメソッド
privateメソッド クラスの内部からしか呼び出せないメソッド

   class Car 
     def run
       set_fuel
     end
     
     private
     
     def set_fuel
       puts "燃料を減らします"  
     end
   end 
   
   car1 = Car.new  
   car1.set_fuel  #privateメソッドからは呼び出せない
   
   car1.run  #runメソッドからは呼び出せる。   

メソッドを定義してから、呼び出すの一連の動作の確認

class Car 
  attr_reader :x, :fuel 

  def initialize 
    @x = 0
    @fuel = 100
  end

  def run(distance) 
    @x += distance
    
    set_fuel(@fuel - distance)
  end 
  
  private
  
  def set_fuel(litre)
    @fuel = litre
  end
end


my_car = Car.new


puts "何km走りますか?"
distance = gets.chomp.to_i 

my_car.run(distance) #5


puts "走行距離: #{my_car.x}km"
puts "ガソリン量: #{my_car.fuel}リットル"

・attr_readerにfuel(燃料)のゲッターを定義
・initializeメソッドに@fuel = 100を代入しインスタンス生成時に燃料を100にする.
 これでインスタンス生成時に@x = x(最初の走行距離が0)と@fuel = 100が呼び出される。
・private宣言下に、set_fuel(litre)メソッドを定義し、@fuelにlitreを代入する。
・runメソッドにset_fuelメソッドで呼び出し、(@fuel - distance)を定義
・newコマンドでインスタンスを生成する。(initializeメソッドが呼ばれる)
・my_car.fuel(ゲッターメソッド)を定義する。
ユーザーが入力をした時に、initializeメソッド、runメソッドが呼び出され、(燃料100-入力された値)が実行される。

注意 
set_fuelメソッドに@fuelのように単独でインスタンス変数が存在することはない。
なぜなら、何も処理を記述していないメソッドはrubyの文法としてあり得ない

例
def ponpoko

end
のようにメソッドの内部処理を定義していないのでエラーになる。

def ponpoko
endなら良い

参照
https://programmer-engine.work/archives/24

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?