![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Rubyには「ダック・タイピング」が可能とのことを知りました。
しかしその有用性がわかりません。
ダック・タイピングのメリットを教えてください。
Wikipediaには以下のように書いてありました。
ダック・タイピング - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83% …
「オブジェクトがあるインタフェースのすべてのメソッドを持っているならば、たとえそのクラスがそのインタフェースを宣言的に実装していなくとも、オブジェクトはそのインタフェースを実行時に実装しているとみなせる」
とりあえず意味はわかりました。しかし、すべてのメソッドを実装する努力をしながらインターフェイスの宣言をしないメリットがわかりません。そのインターフェイスを使うことがわかっているのなら宣言すればいい話だと思いますし、宣言を記述しなくて済むというメリットしかないということもないと思います。
ダック・タイピングのメリットを教えてください。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
> ダック・タイピングのメリットを教えてください。
メリットはリンク先に書かれている
「オブジェクト(変数の値)に何ができるかはオブジェクトそのものが決定する」ではないでしょうか。
リンク先のRubyスクリプト例で言えば、testの引数に与えられるオブジェクトにsoundというメソッドが在りさえすれば、それに応じた戻り値を返すということです。
> 「オブジェクトがあるインタフェースのすべてのメソッドを持っているならば、(以下略)」
については以下のようなスクリプトでは如何ですか
def test(foo)
puts foo.sound
end
class Duck
def sound
'quack'
end
end
class Cat
def sound
'myaa'
end
end
dog = String.new("pochi")
def dog.sound
'bow'
end
test(Duck.new) # => quack
test(Cat.new) # => myaa
test(dog) # => bow
Stringというクラスは、soundというメソッドを実装していませんけれども、dogというオブジェクトはsoundメソッドを持っているので"bow"という値を返します。
反応非常に遅くて失礼しました。
いまさらながらになんとなくわかりました。
この部分は、
def test(foo)
puts foo.sound
end
引数で渡されるfooはsoundというメソッドを持っているかどうかは
保証されないということですね?(Javaばっかりの人なので意味がわかりませんでした)
仮にfooにsoundがなかった場合には
Javaだったらコンパイル時にエラーになる、実行前に保証されている、
Rubyだったら実行時にエラーになる、実行するまでわからない。
でも、1つのインターフェイスでメソッドの有無を保証しなくとも
実装者がきちんと書いてくれれば、インターフェイスを限定しなくとも
いいじゃん。そのほうが柔軟で便利でしょということですね。タブン。
なんというか理念の違いのようなものなのでしょうかね。
Rubyはまったくわからないために時間がかかりましたがようやくわかりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ビーリアルのユーザー名を変え...
-
教えてください
-
パソコンのスクリーンセーバー...
-
三項でたとえば交換って
-
Beautiful Soupのインストール...
-
符号付整数の演算結果を答えよ ...
-
(再質問)エクセルのマクロボ...
-
pythonエラー
-
pandasでsqlite3にテーブル作成...
-
1、Rstudioで回帰直線を求める...
-
tasty qube エクセル スプレッ...
-
Railsチュートリアルの最初がう...
-
プログラミング
-
エクセル 連続保存マクロ
-
エクセルで秒を日時換算する方法
-
A4 持ち込み
-
前回の質問の続き
-
あせんうぶり言語
-
これらは書誌情報だと思うので...
-
情報の表現。()内がどうしても...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【BrowseForFolderでデスクトッ...
-
railsチュートリアル5章の演習
-
ぱいソン
-
自作したメソッド・・・こんな...
-
ダック・タイピングのメリット
-
python return 関数
-
ブロックつきメソッドやyield文...
-
CloseとQuitについて
-
VBA ブックに名前をつけて保存
-
レコードセットオブジェクトの...
-
【引数と戻り値の違い】 はじめ...
-
get() と find() の違いについて
-
「arg」は何の略?
-
教えてください。vb5.0
-
What class are you in? には何...
-
エラー「メソッドまたはデータ...
-
エクセルVBA オートフィルタで...
-
Csvファイルの最終行を取得する...
-
クラス名やモジュール名の競合...
-
VBAで型が一致しないエラー(バ...
おすすめ情報