プロを目指す人のためのRuby入門 その9
第7章 クラスの作成を理解する
前回に引き続き、第7章をやっていきます。
改札機プログラム
電車の運賃を計算するプログラムをクラスを使って作成します。
Gate クラス
class Gate # 駅名と運賃 STATIONS = [:umeda, :juso, :mikuni] FARES = [150, 190] def initialize(name) @name = name end def enter(ticket) ticket.stamp(@name) end def exit(ticket) fare = calc_fare(ticket) fare <= ticket.fare end # 配列のインデックスの違いで運賃が決まる def calc_fare(ticket) from = STATIONS.index(ticket.stamped_at) to = STATIONS.index(@name) distance = to - from FARES[distance - 1] end end
駅名や運賃を定義し、運賃を計算する。
Ticket クラス
class Ticket attr_reader :fare, :stamped_at def initialize(fare) @fare = fare end def stamp(name) @stamped_at = name end end
どこでチケットが発券されたかを管理します。
テスト
require './lib/gate' require './lib/ticket' class GateTest < Minitest::Test def test_gate umeda = Gate.new(:umeda) juso = Gate.new(:juso) ticket = Ticket.new(150) umeda.enter(ticket) assert juso.exit(ticket) end def test_umeda_to_mikuni_when_fare_is_not_enough umeda = Gate.new(:umeda) mikuni = Gate.new(:mikuni) ticket = Ticket.new(150) umeda.enter(ticket) # false であるとき正常 refute mikuni.exit(ticket) end end
本
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る
感想
駅名が大阪なのでなじみが薄いですが、オブジェクト指向のプログラミングをしていると思いました。今は切符じゃなくて、定期とか Suica とかの電子マネーしか使うことがないですね。
チケットじゃなくて…切符か!と一瞬名前が出てこないくらいには使ってないです。
まあ、本来のシステムはとても複雑なんだろうね。