タピオカから学ぶオブジェクト指向プログラミング入門
あっという間に12月になりましたね。
今年に入りプログラミング学習、転職活動という事で凄まじいスピードで時が過ぎ去って行きますね。
あと1ヶ月気を抜いてはならん!!という事で今回は
『オブジェクト指向プログラミング入門』をタピオカクラスを使って学習してみました!!!
はじめに
今回の学習にあたり我らが伊藤淳一さんの動画を参考にしました。(勝手に尊敬させていただいてます)
参考の動画と違う点は2つございます。
1・たい焼きではなくタピオカ(流行ってるからしただけ)
2・テストは書いてません(TDDの方がいいぞ)
へなちょこですので物足りない方はたい焼きの方がいいです。美味しいしね。
構成
今回はタピオカという事で注文時にありそうな物をクラスの中に入れてみます。
#タピオカ #1・飲み物の種類 #2・トッピング #:種類によって値段変動 #3・サイズ(S, M, L) #:サイズによって値段変動 #4・氷 (少なめ、ふつう、多め) #5・砂糖 (少なめ、ふつう、多め) #6・合計料金
STEP1
タピオカクラスを作りインスタンス変数に必要な要素を入れます。
class Tapioca attr_reader :juice, :size, :topping, :ice, :suger def initialize(juice, size, topping, ice, suger) @juice = juice #飲み物の種類 @size = size #サイズ @topping = topping #トッピング @ice = ice #氷の量 @suger = suger #砂糖の量 end end tapioca_1 = Tapioca.new('黒糖ミルクティー', 'S', 'ミルクフォーム', '少なめ', '多め') puts tapioca_1 tapioca_2 = Tapioca.new('黒糖ほうじ茶ラテ', 'M', 'タピオカ倍増', '多め', 'ふつう') puts tapioca_2
この時点で出力しようとしても
#<Tapioca:0x00007fe4868ab1b0> #<Tapioca:0x00007fe4868aafa8>
このようにうまく出力されないので
to_sメソッドを上書きします!
STEP2
def to_s "飲み物: #{juice} | サイズ: #{size} | トッピング: #{topping} | 砂糖: #{suger} | 氷: #{ice} " end
こんな感じにto_sメソッドを上書きすると
飲み物: 黒糖ミルクティー | サイズ: S | トッピング: ミルクフォーム | 砂糖: 多め | 氷: 少なめ 飲み物: 黒糖ほうじ茶ラテ | サイズ: M | トッピング: タピオカ倍増 | 砂糖: ふつう | 氷: 多め
受け取った情報を出力することができました!!
STEP3
次にトッピングやサイズによって値段を変更するプログラムを書いていきます。
#ミルクフォーム = +30円 #タピオカ倍増 = +50円 #コーヒーゼリー = +70円 def charge amount = 550 if size == "S" amount -= 150 elsif size == "L" amount += 100 end if @topping == "ミルクフォーム" amount += 30 elsif @topping == "タピオカ倍増" amount += 50 elsif @topping == "コーヒーゼリー" amount += 70 end amount end
ふつうサイズのトッピング無しの値段を550円とします。
そしてif文で各サイズ、各トッピングの応じて値段を追加し最後にamountで出力させるようにします。
次に先ほどのto_sメソッドに料金を追加します。
飲み物: 黒糖ミルクティー | サイズ: S | トッピング: ミルクフォーム | 砂糖: 多め | 氷: 少なめ | 合計: 430円 飲み物: 黒糖ほうじ茶ラテ | サイズ: M | トッピング: タピオカ倍増 | 砂糖: ふつう | 氷: 多め | 合計: 600円
どうでしょう。
このようにするとクラスの中のタピオカの『注文設計図』なるものから具体的な注文の内容を作り出すことが出来ました。
このようにクラスとは設計図みたいなもので、具体的な物を作る上でひいつようになってくる物なんですね。
最後に
今回は簡単に自分なりに作りながら学習しました。
1つ大事だと思うことはただ見て理解するだけで終わらず、少し変えるだけでもいいので自分で形ある物を作ってみると頭に残りいいインプットができると思います。
それではみなさんあと1ヶ月気を抜かず頑張りましょう!!