さて、前回のエントリであげたRuby / filename、file、txt なんて変数三つも使う理由 / bashの続き。
2. [ もっと人間的な動作で例えられないのかな ]
こんな感じでどうでしょうか。
#otetsudai.rb
reizouko_name = (ARGV[0])
akeppa = open(reizouko_name)def houkoku(guzai)
print guzai
endwhile nakawomiru = akeppa.gets do
houkoku(nakawomiru)
end
akeppa.close
#[EOF]
では説明を。
まず、思い浮かべて頂きたいのはよくある核家族の風景です。時は日曜のお昼です。
小学生の太郎くんは目を覚まします。ちょっとお腹がすいています。
そこで母親に何か作ってとせがみます。日曜日のブランチです。
居間でテレビを視ている母親は「じゃあ冷蔵庫の中身を全部教えて」と言いました。
どうやらいつものように中の具材を聞いてから、何を作るか決めるようです。
太郎くんの家には冷蔵庫が2つあります。
どっちの冷蔵庫か尋ねると母親は「奥の方」とテレビを視ながら答えました。
太郎くんは件の冷蔵庫を開け、全ての具材を覚え(冷蔵庫は閑散としていたので)、いっぺんに母親に言おうとしましたが、
母親が物覚えも悪く、人の話もろくに聞かない人だと言うことを知っていたので、一つずついうことにしました。
具材を全て言い終えると、太郎くんは昼ご飯を作る母親に代わってテレビを視ようとしましたが、
以前、冷蔵庫を開けっ放しにして怒られたことを思い出しキッチンに戻って冷蔵庫を閉めました。
ポイントは
1."「じゃあ冷蔵庫の中身を教えて」"-という母親の台詞
2."どうやらいつものように中の具材を聞いてから"-というこの家庭の習慣
3."どっちの冷蔵庫か尋ねると母親は「奥の方」とテレビを視ながら答えました"-という指定
4."一つずついうことにしました"-という伝達法の選択
5."キッチンに戻って冷蔵庫を閉めました"-という資源の適切な利用
1."「じゃあ冷蔵庫の中身を全部教えて」"-という母親の台詞
これが
ruby otetsudai.rb
という実行にあたります。
2."どうやらいつものように中の具材を聞いてから"-というこの家庭の習慣
習慣化しているので、
def houkoku(guzai)
print guzai
end
メソッドになっています(ここは僕自身ちょっと理解が足りません)
3."どっちの冷蔵庫か尋ねると母親は「奥の方」とテレビを視ながら答えました"-という指定
ここの指定が、
reizouko_name に代入される引数 ARGV[0] となり、
ruby otetsudai.rb reizouko_oku
と実行すればいい、ということになります。
4."一つずついうことにしました"-という伝達法の選択
ここは
while nakawomiru = akeppa.gets do
houkoku(nakawomiru)
end
ということになります。 akeppa.gets が具材を一つずつ伝えるという解釈です。
また、1."「じゃあ冷蔵庫の中身を全部教えて」"-という母親の台詞にある、
「全部教えて」という母親の指示に応えて、while を使用しています。
5."キッチンに戻って冷蔵庫を閉めました"-という資源の適切な利用
これは最後の行、
akeppa.close
にあたります。説明は不要ですね。
reizouko.rbと同一のディレクトリに
./ reizoukoA
./ reizoukoB
を適宜作成し試してみましょう。
$ ruby reizouko.rb reizoukoA
#=>
じゃがいも
にんじん
カレールー
にら
白菜
もやし
醤油
ワイン
コーラ
卵
となりました。これを受けて太郎くん母が何を作るか、というプログラムを組んでみるのも面白いかも。
僕はまだそこまでのレベルにはいけませんが。
それにしても抽象化→具象化は難しいな。逆は簡単なのに。
トラックバック(0)
このブログ記事を参照しているブログ一覧: Ruby / もっと人間的な動作で例えられないのかな
このブログ記事に対するトラックバックURL: http://jippenshar.com/igc/mt/mt-tb.cgi/107


![冷蔵庫で食品を腐らす日本人 [朝日新書059] (朝日新書 59)](http://ecx.images-amazon.com/images/I/11gqCqfaUeL.jpg)


コメントする