翻訳と辞書
Words near each other
・ ダックテイル・ザ・ムービー/失われた魔法のランプ
・ ダックテスト
・ ダックハント
・ ダックバーグ
・ ダックブルー
・ ダックレース
・ ダックワーズ
・ ダック・キング
・ ダック・コール
・ ダック・シーズン
ダック・タイピング
・ ダック・テスト
・ ダック・ドジャース
・ ダック引越しセンター
・ ダック引越センター
・ ダック引越劇場
・ ダッグアウト
・ ダッケ
・ ダッコちゃん
・ ダッコちゃん人形


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

ダック・タイピング : ウィキペディア日本語版
ダック・タイピング
ダック・タイピング)とは、SmalltalkPythonRubyなどのいくつかの動的型付けオブジェクト指向プログラミング言語に特徴的な型付けの作法のことである。それらの言語ではオブジェクト(変数の)に何ができるかはオブジェクトそのものが決定する。つまり、オブジェクトがあるインタフェースのすべてのメソッドを持っているならば、たとえそのクラスがそのインタフェースを宣言的に実装していなくとも、オブジェクトはそのインタフェースを実行時に実装しているとみなせる、ということである。それはまた、同じインタフェースを実装するオブジェクト同士が、それぞれがどのような継承階層を持っているのかということと無関係に、相互に交換可能であるという意味でもある。
この用語の名前は「ダック・テスト」に由来する。
"If it walks like a duck and quacks like a duck, it must be a duck"
(もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである)
デーブ・トーマスはRubyコミュニティで初めてこの言葉を使ったと考えられている。
C++のtemplateはダック・タイピングの静的版である。例えば、各種のiteratorはIterator基底クラスのようなものからメソッドを継承しているわけではないが、同じ構文でコンパイルが通るならば、それはiteratorの一種として扱える。C++で言う「同じインターフェースを持つ」とは、コンパイラにとってインターフェースが同じだということである。したがって、iteratorの実装はオブジェクトである必要すらない。
もう1つ、ダック・タイピングに似たアプローチにOCamlのstructural subtypingがある。メソッドのシグネチャが互換ならば、宣言上の継承関係は関係なくとも、オブジェクトの型は互換であるというものである。これはOCamlの型推論システムによってコンパイル時にすべて決定される。'')とは、SmalltalkPythonRubyなどのいくつかの動的型付けオブジェクト指向プログラミング言語に特徴的な型付けの作法のことである。それらの言語ではオブジェクト(変数の)に何ができるかはオブジェクトそのものが決定する。つまり、オブジェクトがあるインタフェースのすべてのメソッドを持っているならば、たとえそのクラスがそのインタフェースを宣言的に実装していなくとも、オブジェクトはそのインタフェースを実行時に実装しているとみなせる、ということである。それはまた、同じインタフェースを実装するオブジェクト同士が、それぞれがどのような継承階層を持っているのかということと無関係に、相互に交換可能であるという意味でもある。
この用語の名前は「ダック・テスト」に由来する。
"If it walks like a duck and quacks like a duck, it must be a duck"
(もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである)
デーブ・トーマスはRubyコミュニティで初めてこの言葉を使ったと考えられている。
C++のtemplateはダック・タイピングの静的版である。例えば、各種のiteratorはIterator基底クラスのようなものからメソッドを継承しているわけではないが、同じ構文でコンパイルが通るならば、それはiteratorの一種として扱える。C++で言う「同じインターフェースを持つ」とは、コンパイラにとってインターフェースが同じだということである。したがって、iteratorの実装はオブジェクトである必要すらない。
もう1つ、ダック・タイピングに似たアプローチにOCamlのstructural subtypingがある。メソッドのシグネチャが互換ならば、宣言上の継承関係は関係なくとも、オブジェクトの型は互換であるというものである。これはOCamlの型推論システムによってコンパイル時にすべて決定される。
== Rubyでの例 ==
Rubyでの単純な例を示す。

def test(foo)
puts foo.sound
end

class Duck
def sound
'quack'
end
end

class Cat
def sound
'myaa'
end
end

test(Duck.new)
test(Cat.new)

出力は以下である。
quack
myaa
2つのクラスに継承の関係が無いことに注目して欲しい。

抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「ダック・タイピング」の詳細全文を読む




スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.