「初めてのRuby」の復習をexpectationsで(配列とハッシュ・文字列)
「初めてのRuby」を読みました。
特異メソッド・特異クラス周りについては馴染みきっていない印象です・・・知らなかったときよりは理解が深まりましたが。
その他、Rubyでの書き方や細かな動きの部分で知らないことが多く、ためになりました。
この「初めてのRuby」の復習というか、書かれていることを手に馴染ませる意味で、昨日使ったexpectaionsで例文を書き下してみたのですが、これが思ったより面白かったです。
「こういうロジックを書いたら、こういう答えを期待する」ということを、その答えを含めて記載できるし、チェックは自動でやってくれる。
irbで試しに打ち込んでみるというのでもいいのだけれど、ユニットテストで書いておけば後から振り返ることができる。(このあたりは、普通のユニットテスト書くときのメリットと同じ)
ひとまず配列・ハッシュ、あと文字列について。
(なお、内容は興味深く読んだ部分に偏ってます)
# -*- coding: utf-8 -*- require "rubygems" require "expectations" Expectations do #2章 配列とハッシュ #負の添字は末尾から逆順の要素を指す expect 3 do [1,2,3][-1] end expect 2 do [1,2,3][-2] end #範囲外の要素はnil expect nil do [1,2,3][3] end #比較 expect true do [1,2,3] == [1,2,3] end expect false do [1,2,3] == [1,3,2] end expect false do [1,2,3] == [1,2,3,4] end #メソッド expect [1] do [1,1,1,1,1].uniq end expect [1,1] do [1] * 2 end expect true do [1].include? 1 end expect [3,2,1] do [1,2,3].sort do |x, y| y <=> x end end expect [10,20,30] do [1,2,3].map do |x| x * 10 end end expect 6 do [1,2,3].inject(0) do |sum, n| sum + n end end #ハッシュ expect "FOO" do {:foo => "FOO" }[:foo] end expect true do {:foo => "FOO", :bar => "BAR"} == { :bar => "BAR", :foo => "FOO"} end #Enumerator require 'enumerator' expect [60, 3] do arr = [0, 0] [10, 20, 30].enum_for(:each_with_index).map do |n, index| arr[0] += n arr[1] += index end arr end #4章 文字列 #文字列操作(Rubyの文字列はImmutable) expect "ab" do str = "a" str << "b" end expect "aaa" do "a" * 3 end expect "cba" do "abc".reverse end expect ['3', '#{1 + 2}'] do ["#{1 + 2}", '#{1 + 2}'] end #正規表現 expect /ignorecase/i do "IgnoreCase" end #文字分割 expect ["a", "b", "c"] do "a,b,c".split(/,/) end expect ["a", "b", "c"] do "abc".split(//) end #フォーマット expect "0003" do sprintf("%04d", 3) end #比較(文字列) expect [true, false] do ["a" == "a", "a".equal?("a")] end #比較(シンボル) expect [true, true] do [:a == :a, :a.equal?(:a)] end #マルチバイト文字列 expect ["あ", "い", "う"] do "あいう".scan(/./u) # Ruby1.8で日本語エンコーディングを意識するなら正規表現を使う end end