top


総投稿数 本 
no_

スポンサーサイト

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

Ruby:◇スーパークラスメソッド ・・・ 【童話で学ぶ Ruby:21歩目】

 2008-12-17
第21歩
 ◇スーパークラスメソッド

  ・リンゴを食べる小人さん(?)
   ※Rubyプログラムを書いて実感するための
    例題プログラムが続く
   ・(前回はこちら

  今回も ◎ コロボックルのいる森 ◎
  で新しいキャラクターが登場! 怠け者だ。

  [ 第四話:ツバキノヒコ は気難しい怠け者? ]
  respect for 「佐藤さとる」さん
  thanks for 「アンの小箱」さん

長いので、追記に ▼

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


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


more  [ 第四話:ツバキノヒコ は気難しい怠け者? ]
      [ 前回 ]

 ヒイラギノヒコや、エノキノヒコの一族の親戚に
「ツバキノヒコ」がいる。
 彼は「ハタメノウオ」を食べないけれど、いつも、ヒイラ
ギノヒコたちをからかいにやってくる。怠け者だ。そして、
気難しい。
 時々、ヒイラキノヒコが忙しくてたまらない時、「ツバキ
のヒコ」に手伝いをお願いするのだけれど、すぐに機嫌を損
ねて、さぼってしまう。
 困ったものだ・・・


 ●登場人物・物(オブジェクト)
  ・ヒイラギノヒコ
  ・ツバキノヒコ
  ・ハタノメウオ


 ●「Super」という特別なメソッド
 ◆親戚なので基本的には同属(クラスの継承)
  ※class Hiiragi を継承する

・ツバキノヒコは、怠け者だ。
 同じように仕事をしようとするけど
 2回に1回は。面倒くさくてやめてしまうのだ・

 ※Hiiragiクラスは
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


 ・このクラスの次に、次のようにして
  これを継承したクラスを作り
  その中で、
  ・「ハタメノウオ」を捕るメソッド
   def carry(a,b) を
   オーバーライドする
   ※参考書では、この「捕るメソッド」ではなく
    workメソッドのオーバーライドだったが、私の
    理解手順ではこちらのメソッドのオーバーライド
    の方がしっくりとくる
class tubakino < Hiiragi
def carry(a,b)
if rand(2) == 0
sakana = hitting(a) # 先頭の要素をひとつとりだす
b.push sakana # 取り出した要素を格納
puts "ほい" # しゃべる
else
putus "面倒くさい!"
end
end
end

 ※参考書では、ここが
  puts "puts " めんどうくさいなぁ・・・"
  となっていて、puts が重複しているが、これは誤植だろう

  ここで、1/2の確率で実行される部分は、
  まったく最初の定義と同じだ。

  ここで「Super」の出番。
  上記は次のように書き直すことができる。
class tubakino < Hiiragi
def carry(a,b)
if rand(2) == 0
super
else
putus "面倒くさい!"
end
end
end


  ●super を使うメリット
   必ずしも使わなくてもいいが・・・

   □ソースがすっきりとし、読み易くなる
   □プログラムの変更に強くなる

今日の 留意!
superは、ソースにおける整合性を図る上で
 非常に有効なものとなる
 (これ便利だなぁ)

commentsコメント
comment_post












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

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

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

 

リンク集

 

最近の記事

 

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

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

 

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