class Drink#class名は頭文字が大文字である
def name #defとはdefineで定義するという意味
"カフェラテ"
end
end
drink = Drink.new#newメソッドでDrinkクラスのオブジェクトを新しく生成
puts drink.name#メソッドの呼び出しは オブジェクト.メソッド
p drink.methods#methodsメソッドはオブジェクトが呼び出すことのできるメソッドの一覧表示を行う
オブジェクト.class でそのオブジェクトの属するclassを表示する
すべてのオブジェクトはいずれかのclassに属する
class Drink
def order(name)#引数として受け取ったオブジェクトをnameに代入
puts "#{name}をください"
end
end
drink = Drink.new
drink.order("カフェラテ")#orderメソッドを実施して引数として"カフェラテ"を渡した
class Drink
def name
"カフェラテ"
end
def order
puts "#{name}をください"
end
end
drink = Drink.new
drink.order
class Drink
def name
p self #selfでレシーバーを取得 selfはレシーバーが何かを明らかにしてくれる 表示方法はclassのIDを表示する
"モカ" + topping #同じクラスのtoppingメソッドを呼び出した
end
def topping
"エスプレッソショット"
end
end
drink = Drink.new
p drink
puts drink.name
class Drink
def order(item)
puts "#{item}をください"
@name = item #このとき、@nameをnameとローカル変数にしてしまうとreorderメソッドを実行する際スコープの範囲外であることから、nameがなんの事を言っているのかわからなくなるので「インスタンス変数」の@nameとしなければならない
end
def reorder
puts "#{@name}をもう一杯ください"
end
def name
@name #インスタンス変数であってもオブジェクト外では取得することができないので、@nameを戻り値にするメソッドを加えてあげるとできる
end
end
drink1 = Drink.new
drink2 = Drink.new
drink1.order("カフェラテ")
drink2.order("モカ")
drink1.reorder
drink2.reorder
puts drink1.name
puts drink2.name
class Drink#name=メソッド
def name=(text)
@name = text
end
def name
@name
end
end
drink = Drink.new
drink.name= "カフェラテ"# drink.name = "カフェラテ" と書くこともできる
puts drink.name
p drink.instance_variables# => [:@name] .instance_variablesは指定したオブジェクトのインスタンス変数一覧を出力する
class Drink
def initialize #initializeは初期値を設定することができる
puts "オブジェクト!"
end
end
Drink.new#今まで通りであればなにもない空のオブジェクトができるはずだが、initializeメソッドにより自動で文字が入った
#=> オブジェクト!
class Drink
def initialize
@name = "カフェラテ"
end
def name
@name
end
end
drink = Drink.new#自動的にinitializeメソッドが呼び出される
puts drink.name
#=> カフェラテ
class Drink
def initialize(name)#引数としてname
@name = name
end
def name
@name
end
end
drink = Drink.new("モカ")#受け渡す"モカ"
puts drink.name
class Drink
def initialize(name)
@name = name
end
def name
@name
end
end
drink1 = Drink.new("カフェラテ")
drink2 = Drink.new("コーヒー")
drink3 = Drink.new("モカ")
puts drink1.name
puts drink2.name
puts drink3.name
`def self.メソッド名
end`
class Cafe
def self.welcome#----------クラスメソッドを定義する際はメソッドの前に「self」をつける---------
"いらっしゃいませ"
end
end
puts Cafe.welcome
#=> いらっしゃいませ
class Cafe
def self.welcome
"いらっしゃいませ"
end
def self.welcome_again
welcome + "いつもありがとうございます"#---------クラスメソッド「welcome」を呼び出す。メソッド名書けばOK-------
end
end
puts Cafe.welcome_again
#=> "いらっしゃいませいつもありがとうございます"
class Cafe
class << self
def welcome
"いらっしゃいませ"
end
end
end
puts Cafe.welcome
#=>いらっしゃいませ