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で質問しましょう!
似たような質問が見つかりました
- メディア・マスコミ NHKがねつ造 16 2023/05/16 22:37
- マウス・キーボード タイピングについて。 1 2023/07/07 16:27
- デスクトップパソコン 小型PCのオススメを教えてください 3 2022/09/18 19:39
- その他(生活家電) 車載スピーカーで宣伝したい 1 2023/02/22 19:59
- 洋画 「トラ・トラ・トラ!」の字幕 3 2022/10/17 01:15
- 船舶・クルーズ Windows10のエクスプローラにて。 1 2022/10/10 20:11
- 仮想通貨(暗号通貨) 仮想通貨【アプトス】もうすごく上がる可能性は高い? 10万円を1億円い増やすyoutube動画 3 2022/10/23 21:49
- モニター・ディスプレイ 突っ張り棒につけれるマイクアームを探しています。下記リンクはモニターアームですがそのようにポールにつ 3 2022/09/07 01:18
- 自転車修理・メンテナンス メカニカルディスクブレーキキャリパーについて https://www.amazon.co.jp/%E 1 2022/09/26 00:51
- ライブ・コンサート・クラブ あなたの気になる「名ばかり~」はどんなものですか 7 2023/03/08 19:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ぱいソン
-
ハッシュ(単語数を数える) た...
-
pythonのerrorコード
-
パイソンのクラス
-
No route matches [GET] "/post...
-
Rubyについて質問です
-
Ruby:シルバーについて
-
実行時エラー450:引数の数が一...
-
正規表現で両端に文字列を置換
-
get() と find() の違いについて
-
VBA/GetTickCountの49.7日の境...
-
Csvファイルの最終行を取得する...
-
Rubyでクラスファイルをディレ...
-
テンプレートの特殊化でコンパ...
-
エラー「メソッドまたはデータ...
-
10円未満を切り捨てる方法は?
-
VBAで型が一致しないエラー(バ...
-
Ruby 特異メソッドのnewが先に...
-
Ruby
-
ruby:モジュール関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ぱいソン
-
ハッシュ(単語数を数える) た...
-
Access2000にExcel2000のデータ...
-
Rubyの超初心者です。「戻り値r...
-
Ruby Fileクラスについて
-
RubyのProcについて
-
自作したメソッド・・・こんな...
-
pythonのerrorコード
-
get() と find() の違いについて
-
「arg」は何の略?
-
エラー「メソッドまたはデータ...
-
What class are you in? には何...
-
パイソンのクラス
-
教えてください。vb5.0
-
No route matches [GET] "/post...
-
クラス名やモジュール名の競合...
-
VBAで型が一致しないエラー(バ...
-
Rubyについて質問です
-
実行時エラー450:引数の数が一...
-
エクセルVBA オートフィルタで...
おすすめ情報