プロを目指す人のためのRuby入門 その10
第7章 クラスの作成を理解する
前回に引き続きクラスについて学びます。
テストケースのリファクタリング
各駅のインスタンスはテストケースに依存しないので、setup() メソッドで定義しておきます。
require 'minitest/autorun' require './lib/gate' require './lib/ticket' class GateTest < Minitest::Test # テストメソッドが実行される前にこのメソッドが毎回呼ばれる def setup @umeda = Gate.new(:umeda) @juso = Gate.new(:juso) @mikuni = Gate.new(:mikuni) end def test_umeda_to_juso ticket = Ticket.new(150) @umeda.enter(ticket) assert @juso.exit(ticket) end # 190円の切符で梅田で入場し、三国で出場 def test_umeda_to_mikuni_when_fare_is_not_enough ticket = Ticket.new(150) @umeda.enter(ticket) # false であるとき正常 refute @mikuni.exit(ticket) end # 150円の切符で十三で入場し、三国で出場 def test_umeda_to_mikuni_when_fare_is_enough ticket = Ticket.new(190) @umeda.enter(ticket) assert @mikuni.exit(ticket) end def test_juso_to_mikuni ticket = Ticket.new(150) @juso.enter(ticket) assert @mikuni.exit(ticket) end end
クラスメソッド
クラスメソッドを定義して使用します。インスタンスメソッドとの違いは次の記事から。
【Ruby】クラスメソッドとインスタンスメソッドについてザクッと分かりやすく説明してみる - Qiita
class Product attr_reader :name, :price def initialize(name, price) @name = name @price = price end # 金額を整形するクラスメソッド def self.format_price(price) "#{price}円" end def to_s # インスタンスメソッドからクラスメソッドを呼び出す formatted_price = Product.format_price(price) "name: #{name}, price: #{formatted_price}" end end product = Product.new('A great movie', 1000) p product.to_s
本
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る
感想
大体本の中間までの内容をやり終えました。引き続き頑張ります。