From: "conundrum /" <conundrum / hotmail.co.jp>
Subject: [ruby-list:41034] Re: RubyにはPerlのuse strictのようなものはありませんか?
Date: Sun, 14 Aug 2005 17:49:41 +0900

るびきちです。

> === って、こういうふうにも使えるんですね。
> irb で試してみました。x  === Numeric だとうまくいかないんですね。

すっきりした記法でしょ?
個人的には気に入ってます。

Numeric === x or raise TypeError
って書き方もありです。
必要条件が前に出てるのでこっちの方が見栄えがいいかもしれません。
まあ、好みの問題ですね。

> おすすめのエディタがあれば、紹介していただけませんか。
> ひょっとして自分が使っているエディタの機能を知らないだけかもしれませんけど。

僕は大昔からEmacs一筋です。
WindowsならMeadowがありますね。
長年Emacsと付き合ってるけど、いまだ新発見が絶えません。
ほんと奥が深い。

# el4rでやっとEmacsLispの呪縛を解いたからもっと好きになるかも…。

viのhjklも捨てがたいと最近感じていますが、転向する気にはなれません。

とはいえ、エディタは好みの問題なので、自分に合ったものを選びましょう。

> 必要と用途に応じて 秀丸, K2Editor, TeraPad, MkEditor などを使い分けていま

「達人プログラマー」にも書いてありますが、
できれば、どれかひとつにしぼって極めた方がいいと思います。

> vi系, emacs系がキライというわけではなく、なかなかはじめるきっかけがなくて。
というわけでこの際、始めてみては?

> ある程度の規模のコードには test/unit を使います。
小さいコードでも十分実用価値はあります。
こんな感じでコマンドの出力を比較すれば立派な回帰テストです。
メソッドレベルのテストをするまでもなくすぐ書けるコードには、
こんな感じに使うといいですよ。

# capitalize.rb
puts ARGV[0].capitalize

# test-capitalize.rb
require 'test/unit'
class TestCapitalize < Test::Unit::TestCase
  def test0
    assert_equal("Abc\n", `ruby capitalize.rb abc`)
  end
end  



ruby test-capitalize.rb

Loaded suite test-capitalize
Started
.
Finished in 0.029626 seconds.

1 tests, 1 assertions, 0 failures, 0 errors

> 遠回りなようで、その実、TDDしない場合に比べて、時間的にさほど大差なく
> 完成できるなぁという実感は、あります。
TDDで気に入ってる技は「Fake it」です。仮実装。
うわー、redだぁー、って思ったらとりあえずfakeしてgreenに。
これで精神的に大部軽くなります(笑)。
greenになったら次はrefactoringで定数を変数にしたりしてgreenを維持〜
最初は馬鹿にしていたけど、思ったよりも強力な手法です。

> 最近「るびま」で send という技を発見して、
> private method もきちんとテストできるようになりました。
__send__はRubyのdynamicなところがでています^^

> 面倒がらずに、ちゃきちゃきテストコードを書くよう精進します。
必ず報われるので、がんばってくださいね。

> しかし、ま... 延々と悩んだバグの原因が typo だったりすると、ものすごく疲れま
> す。
> algorithmic なバグの10倍くらい疲れる。
昔よく経験しました。まったくその通りです(^^;

> はやくその dynamic なんちゃらの恩恵にあずかりたいことだなぁ。

dynamicなところといえばIOとStringIOを見てください。StringIOは文字列を
IOのメソッドで操作しますが、IOのサブクラスではありません。Rubyの場合、
インターフェース宣言はないものの、共通するメソッドを揃えれば仲間なので
す。

def print_output(io)
  io.puts "ok"
end

print_outputをテストをするとき、本物のIOオブジェクトのかわりにStringIO
を渡すとすっきりします。

るびきち☆
http://www.rubyist.net/~rubikitch/