ひたすらコードを書きました。
コードを書くための空間で、
コードを書くことだけを行った時間だった。
幸せ。
ノートPCの電池が持つか心配だったけど、
ギリギリ大丈夫だった。
というわけで、レポートもつらつら文章を書くよりも、
コードを書くことにする。
演習問題になっていたStackをテストファーストで実装。
Stackの仕様
- initialize
- 空のスタックを作る
- push(x)
- スタックの最後にxを追加する
- pop
- スタックの最後の要素を取り除く
- peek
- スタックの最後の要素を返す(スタックは変更しない)
- length
- スタックの要素の数を返す
- empty?
- スタックが空なら真、空でなければ偽
Stackの実行例
s = MyStack.new s.push(1) s.push(4) s.push(2) s.peek # 2 s.pop s.peek # 4
initializeとempty?の実装
require 'test/unit' require 'my_stack' class TestMyStack < Test::Unit::TestCase def setup @s = MyStack.new end def test_empty? assert(@s.empty?) end end
class MyStack def initialize @s = [] end def empty? @s.empty? end end
pushとpeekの実装
・ ・ def test_push_peek @s.push(1) assert_equal(1, @s.peek) end ・ ・
class MyStack def initialize @s = [] end def empty? @s.empty? end def push(x) @s.push(x) end def peek @s.last end end
pushとpeekの実装(テストを追加)
・ ・ def test_push_push_peek @s.push(3) assert_equal(3, @s.peek) @s.push(5) assert_equal(5, @s.peek) end ・ ・
popの実装
・ ・ def test_push_push_peek_pop_peek @s.push(3) @s.push(5) @s.push(2) assert_equal(2, @s.peek) @s.pop assert_equal(5, @s.peek) end ・ ・
class MyStack def initialize @s = [] end def empty? @s.empty? end def push(x) @s.push(x) end def peek @s.last end def pop @s.pop end end
Forwardableを使うようにMyStackを変更
require 'forwardable' class MyStack extend Forwardable def initialize @s = [] end def_delegators(:@s, :empty?, :push, :pop) def_delegator(:@s, :last, :peek) end
むはー!
7/4追記
lengthを実装し忘れてる・・・orz