ダックタイピング

Duck Typing

前にどこかで見て一体どういう意味なんだろうと思ったがそのまま記憶の彼方に紛れてしまったが先日のartonさんの日記を見て思い出した。

ダックタイピング

同じクラスを継承したクラスでなくても、同じ振る舞いがあれば同属のクラスとみなす

はて、これだとインタフェースを実装することと何も変わらないと思ったのだが...

artonさんの日記にもあるが「グァ〜」って鳴いたら何でもアヒルとして扱う、同じ振る舞いさえすれば同じものとして扱うプログラミングらしい(if it walks like a duck and talks like a duck, then it is a duck. )。同じくartonさんの日記からのリンクVBの次期バージョンの解説DuckTypingのおかげでなんとなく解ってきた感じだ。型のチェックを遅らせて動的に行うことがミソか。(.NETでいえばRealProxyクラスのInvokeメソッドでIMessageインタフェースを使って「グァ〜」と鳴けるか、ヨチヨチ歩けるか等を調べる、みたいな感じか)

次期.NETの開発言語はこの他にもラムダ関数(ラムダ式)が作れたり、ローカル変数の宣言が型を指定せずにvar 〜で出来たり匿名型(AnonymousTypes)が作れたり※1と動的な方向への拡張が多いのが特徴的だ。

※1

リンクで紹介したVBの例と同様にC#3.0でも型指定が入らない変数宣言var〜と匿名型(Anonymous Types)により以下のような変数の宣言が可能になるらしい

    var x = new { a = 3, b = 5, c = “some text” };

このように記述するとC#コンパイラは以下のコードを自動的に生成する。

class __Anonymous1
{
    private int _a = 3;
    private int _b = 5;
    private string _c = “some text”;

    public int a { get { return v1; } set { _a = value; } }
    public int b { get { return v2; } set { _b = value; } }
    public int c { get { return v3; } set { _c = value; } }
}