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」まで一気に定義されるような感じにしたらカッコいいなー。と思いました。