Objective-C
Objective-Cでダックタイピングしてみる
Objective-CにはC++の関数テンプレートのようなものは無いので、ジェネリックな関数つまり「どんな型でも何でも来い」的な関数を作ることは不可能だ。
にも関わらず、C++よりも簡単にダックタイピングが実現できる。
なぜかというとObjective-Cのオブジェクト(インスタンス)が、C側から見るとすべてid型に見えるため、id型を引数とする関数を作ってしまえば「オブジェクト(インスタンス)なら何でも来い」という関数になってしまうからだ。
オブジェクトだけはほぼ完全なジェネリクスがあり、まるで動的型付け言語かのような鮮やかなダックタイピングができる。
ただオブジェクト以外は普通のC言語なので、「intでもlongでもcharでも何でもいいよ」という関数は、もちろん作ることができない。(C99の_Genericとマクロを使ってがんばればなんとかそれっぽいことができる・・という感じ)
オブジェクトと非オブジェクトの温度差が大きい言語だ。
このオブジェクト(だけ)の柔軟さは、同じC系のオブジェクト指向型言語であるC++には真似のできないところだが、やはりその分パフォーマンスは悪い。
|