10の練習問題をやってみよう(四日目)

新しくプログラミング言語を覚えたいときに行うべき10の練習問題
実際にやってみよう。

第四問

簡易電卓。0で割ったときの処理を自分なりに作りこむ。

こういう電卓クラスを作ろぞー


前回書いたテストクラス。

$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..' , 'lib')

require 'test/unit'
require 'calc'

#
# 電卓クラスのテストケース
#
class TestCalc < Test::Unit::TestCase
  
  # 初期化メソッド。各テストメソッドの前に実行される。
  def setup
    @calc = Calc.new
  end
  
  # [0]ボタンのテスト
  #   押すボタン: [0] [0]
  #   画面の表示: [0] [0]
  def test_push_0
    assert_equal(0, @calc.push_0)
    assert_equal(0, @calc.display)
    assert_equal(0, @calc.push_0)
    assert_equal(0, @calc.display)
  end
  
  # [1]ボタンのテスト
  #   押すボタン: [1] [1]
  #   画面の表示: [1] [11]
  def test_push_1
    assert_equal(1, @calc.push_1)
    assert_equal(1, @calc.display)
    assert_equal(11, @calc.push_1)
    assert_equal(11, @calc.display)
  end
  
end

とりあえずこのテストが全部オッケーになるようにCalcクラスを軽く実装しよう。

#
# 電卓クラス
#
class Calc
  
  # コンストラクタ
  def initialize
    # 電源を入れたら[0]って表示されるようにしよう。
    @disp = 0;
  end
  
  # [0]ボタンを押すメソッド
  def push_0
    @disp *= 10
    @disp += 0
  end
  
  # [1]ボタンを押すメソッド
  def push_1
    @disp *= 10
    @disp += 1
  end
  
  # 窓に表示されている数字を返すよ
  def display
    @disp
  end
  
end


よっしゃー!テスト実行だー!

2 tests, 8 assertions, 0 failures, 0 errors

やったー!
テストが全部オッケーになったよー!
この調子でがんばろう

思ったこと

Rubyでは

class Hoge
  attr_accessor :name, :age
end

ってやると、「name」プロパティと「age」プロパティにアクセスするメソッド( Javaでいう getter と setter )が動的に定義されるそうです。
おそらく「メソッドを定義するメソッド」っていう、何かとんでもない仕組みがあるんだと思います。


そして「0」〜「9」の数字ボタンは殆ど同じような内容のメソッドになるような気がするので、なんとか上記のような仕組みを使って

class Calc
  def_push_nums 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
end

って書いたら「push_0」〜「push_9」まで一気に定義されるような感じにしたらカッコいいなー。と思いました。