From: matz@... (Yukihiro Matsumoto) Date: 2000-01-11T01:26:19+09:00 Subject: [ruby-dev:8898] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) まつもと ゆきひろです In message "[ruby-dev:8894] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num)" on 00/01/10, Minero Aoki writes: |今回の問題を通して「メソッドの仕様が適切である」とはどういう |ことか、基準はなんなのか改めて考えなおしてみたのですが、結局 |「オブジェクト指向入門」に示されている基準がかなりよいのでは |ないかと思いはじめました。それは、 | |「メソッドはファンクションかプロシージャである」 |「プロシージャはオブジェクトの状態を変化させる」 |「ファンクションはオブジェクトの状態を変化させずに値を返す」 | |…ということです。 |この基準がいいと思うのは単にオブジェクト指向入門に書いてあったから |ではなく、実際 Ruby のライブラリにあてはめて考えてみるとなかなか |うまくいくからです。 ふうむ。実は私はMeyerのこの考え方には賛成してません。つーか、 どっちかっていうと「強制されるのは迷惑」という感じでしょうか。 理由はあおきさん自身もおっしゃっているようにこのルールに対す る明確な反例が存在するからです。 |しかし、実際にこのような Ruby の仕様は使いやすく、自然と感じられます |(ですよね?)。この矛盾をどう埋めるのがよいかと考えたところ、 |「名前がルール違反をすることを明確に示していればよい」のではないかと |いう結論にたどりつきました。 そうなのかなあ。readって名前で「ルール違反」をしているとはっ きり分かるのは普通じゃないですよ。でも、このルールにしたがっ たEiffel的IOはめちゃめちゃ使いにくそうな仕様でした。 私としては、このルールは「役に立つこともある」という程度の位 置づけでしかないです。 |ぼくは「そんなものは Ruby にはないんだ!」と信じることで |心の平静を保っています。 ^^;; |実際 $_ なんて使ったこともないし。 あれは one liner の挙動を説明するためにあるんです。 私も直接はあんまり使ったことないです。でも ruby -e 'print if /RE/' とかはやるから。 まつもと ゆきひろ /:|)