Python の経験と合わせて JavaScript を使用して視野を広げることで、いくつかのことを考えました。
外部クライアントへのエンティティのビジョンがそのインターフェイスを介している場合、タイプの目的は何ですか?
静的型付き言語では、型は非常に強力で中心的な重要性を持っています。タイプとインターフェースは厳密に関連付けられています。たとえば、Java でインターフェイス FooIface を宣言し、そのインターフェイスを実装するオブジェクトを宣言すると、BarIface を必要とするコンテキストでは、2 つのメソッド、シグネチャ、および例外がまったく同じであっても、それを使用することはできません。
Python ではそうではありません。2 つのオブジェクトの型がまったく異なり、関連性がない場合でも、それらのインターフェイスが同じである限り、それらは完全かつ透過的に交換可能です。アヒルのように鳴いて歩くなら、それはアヒルです。実行時にインターフェイスを完全に変更することで、オブジェクトの性質を完全に変更できますが、元の型は保持されます。
この観点は、あらゆるプロトタイプ チェーン内のすべてのオブジェクトがまさにオブジェクトである Javascript では極端になっています。JavaScript で各オブジェクトのタイプを尋ねると、それがオブジェクトであることがわかります。
私には、これらの言語の型の概念が無益の限界に達しているように見えます。では、何が本当に重要なのでしょうか? 型は動的型付け言語で本当の意味を持っていますか?