top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_487

Ruby:◇クラスを使ったプログラム(2) ・・・ 【童話で学ぶ Ruby:19.5歩目】

 2008-11-21
第19.5歩
 ◇クラスを使ったプログラム(2)

  ・リンゴを食べる小人さん(?)
  違う違う! 変更して
  ・ハタノメウオを食べるヒイラギノヒコ
   ※クラス定義を書いて実感するための
    例題プログラムが続く
   ・まぁ、運べば(前回)、食べるよなぁ。

  さて、今回の ◎ コロボックルのいる森 ◎
  は如何に?

  [ 第二話:ヒイラギノヒコ 食べる ]
  respect for 「佐藤さとる」さん
  thanks for 「アンの小箱」さん

長いので、追記に ▼

※この連載は、はじめて「Ruby」に取り組んだmetaboyが、
 PHPなどとの違いを考慮しつつ、ゆっくりと
 良書「はじめてのRubyプログラミング」を基に
 学んでゆく、詳細な記録です。
                      (本日の参照:188頁


FC2ブログランキングにほんブログ村 IT技術ブログ Webサイト構築へブログ王ランキング人気ブログランキング人気ホームページランキングへ


more  [ 第二話:ヒイラギノヒコ 食べる ]
      [ 前回 ]

 ヒイラギノヒコはよく働く。
 いつも行くのは、「クサカレノヤマ」と呼ばれる、人々が
「カミノニワ」に往くには必ず通らなければならない、ブナ
とシイノミの木で覆われた、うっそうとした森だった。
 毎日毎日、ただ黙々と、ヒイラギノヒコは「ヤマ」へ向か
った。そこに流れる小川では、「ツバキノヒコ」が大好きな
「ハタノメウオ」が獲れるのだ。ツバキノヒコは、ちょっと
気むずかしい、ヒイラギノヒコの弟だ。でも可愛い。
 せっせと働く。よく働く。ヒイラギノヒコは、働く。
 でも、ヒイラギノヒコでも、お腹は減るさ。
 こんなによく働けるのも、彼が何よりも「食べる」ことが
好きなからだ。そ、つまみ食い、だな。
 びくに溢れるほど獲ったハタノメウオ、だけれど、ツバキ
ノヒコに届けるまえに、実は半分は無くなってしまうんだ。


 ●登場人物・物(オブジェクト)
  ・ヒイラギノヒコ
  ・クサカレノヤマの小川
  ・ハタノメウオ
  ・ハタノメウオを入れるびく


 ●動き(メソッド)を追加する
 ◆つまみ食いする(メソッドの定義)
  ※Hiiragi(ヒイラギノヒコ)に組み込む

・ヒイラギノヒコは、時々獲ったハタノメウオ
 をつまみ食いし、
  ・うまければ > 「やりー!」
  ・まずければ > 「ケッ!」
 という
 ※前回、作った
  Hiiragiクラスに eatsメソッドを追加
  先に作った今度は「旨さ」のレベルとして
  0 から 9 までのレベルを返すようにする
class Hiiragi
def eats(a) # メソッドの定義(追加)
if a.sweets > 6 # 7以上であれば「うまい」
puts "やりー!"
else
puts "ケッ!"
end
end
end


 ※参考書ではその際に
  先に作った hits を利用するようにしているが
  hits は、一度取得した値を保持するよう
  initialize されている
 ※毎回違う値が返ってくるように
  新たに、sweetsメソッドを
  Hatanomeクラスに追加する
class Hatanome
def sweets # 追加部分
@sweets = rand(10); # 魚のうまさ
end
end



 ◆お腹空いてる?(メソッドの定義)
  ※Hiiragi(ヒイラギノヒコ)は
   いつも つまみ食いするわけではない。
   もちろん、それはお腹が空いたときだけだ。

・ヒイラギノヒコが、今
 お腹が空いているかどうか
 それを判定するメソッドを追加
 ※参考書通り
  0 から 2 までの値を返し、
  0 のときにつまみ食いをしてしまう (1/3 確率)
class Hiiragi
def hungry? # メソッドの定義(追加)
rand(3)==0 # 0であれば 真(true)返す
end
end



 ◆つまみ食い しちゃう?(メソッドの定義)
  ※Hiiragi(ヒイラギノヒコ)が獲った
   魚(ハタノメウオ)を順番に取り出し
   そのとき、お腹が減っているか判断
   減っていれば食べてしまう
   ことにしよう

・お腹が減っていると
 食べてしまう部分をメソッドにする
 ※参考書とは少し変える
  今 びくに入っている魚の数だけチェック
  お腹が空いていれば食べて数が減ってゆくことにする
  減っていなければ 「我慢我慢」とぼやく
class Hiiragi
def tumamigui(a) # メソッドの定義(追加)
return if a.empty? # びくになければ戻る
if hungry? # お腹減って 1匹食べてしまう
fish = hitting(a) # びくから ひとつとりだす
eats fish
else
puts "我慢我慢"
end
end
end

 ※エラートラップ
  びくに入っている魚を食べちゃえば 数は減る
  空になってしまった場合の
  エラートラップを組み込んでおく
  return if a.empty?


 ◆つまみ食い してしまう(メソッドの定義)
  ※Hiiragi(ヒイラギノヒコ)が獲った
   魚(ハタノメウオ)の数だけ
   悩む部分を実装(実行ループ)

while biku.size > 0
hiiragi.tumamigui(biku)
end



 ◆食べた魚は(メソッドの定義)
  ※Hiiragi(ヒイラギノヒコ)が獲った
   魚(ハタノメウオ)がちゃんと
   ユニークになっているか確認
 ※参考書通り
  inspect を利用して
  オブジェクトが pメソッドに与えられた時の
  表示スタイルを定義しておき
  魚を特定する表示を行う
class Hatanome
def inspect
"ハタノメウオ(#{@hits})"
end
end


これを利用する部分を 実行ループに加える
※まだ、びくに魚が
 残っていれば表示
while biku.size > 0
hiiragi.tumamigui(biku)
if biku.size > 0
p biku
end
end


ほい。ここまで確認。


 ●本日の脚本(ソース)
class Hatanome
def initialize # 初期化(一度だけ実行)
@hits = rand(10); # 魚の番号 確定
end

def hits
@hits
end
def sweets
@sweets = rand(10); # 魚のうまさ
end
def inspect
"ハタノメウオ(#{@hits})"
end
end
class Hiiragi
def hitting(a) # メソッドの定義
a.shift
end
def carry(a,b)
sakana = hitting(a) # 先頭の要素をひとつとりだす
b.push sakana # 取り出した要素を格納
puts "ほい" # しゃべる
end

def eats(a) # メソッドの定義(追加)
if a.sweets > 6 # 7以上であれば「うまい」
puts "やりー!"
else
puts "ケッ!"
end
end

def hungry? # メソッドの定義(追加)
rand(3)==0 # 0であれば 真(true)返す
end

def tumamigui(a) # メソッドの定義(追加)
return if a.empty? # びくになければ戻る
if hungry? # お腹減って 1匹食べてしまう
fish = hitting(a) # びくから ひとつとりだす
eats fish
else
puts "我慢我慢"
end
end
end


river = Array.new(3){Hatanome.new}
biku = []
hiiragi = Hiiragi.new # ヒイラギノヒコ

while river.size > 0
hiiragi.carry(river, biku)
p biku.size #=> 獲って「びく」に入れた
end

while biku.size > 0
hiiragi.tumamigui(biku)
if biku.size > 0
p biku
end
end



今日の 留意!
pメソッドの表示スタイル変更する inspect
empty? メソッドに注意
return if a.empty? という書き方

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/487-57778c63
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。