このような言語(C#、Javaなど)で書いたことがありますか? (アヒルタイピングに関する議論については、this questionを参照してください)強く型付けされたOOP言語でのダックタイピングの引数は?
答えて
他の質問はアヒルタイピングとはほとんど関係がありませんでした。とにかく、これが閉じていないと仮定すれば、私は本当にダックタイピングが大失敗したと言うのは、大きなAPIを使ってクラスをテストしようとするときです。別のプログラミング言語では、あなたが必要とするものの基本的な基本を実装する自己記述クラスを渡すことができますが、別のフレームワークが必要です。
たとえば、フレームワークなしでJDBC ResultSetをJavaでモックしようとすると、少し苦労します。
あなたが所有していないコードで作業する必要があり、適切な抽象化(HttpContext anyone?)を持たないたびに、作業する必要があります。 HttpContext型にはその種の抽象化がないので、あなたはIHttpContextを受け入れるメソッドを持つことができないので、アダプタやFactoryなどを解決する必要があります。 あなたのコードでIHttpContextコントラクトを定義し、HttpContextのようにし、IHttpContextを受け入れるようにメソッドを設定し、本当の、実際のHttpContextオブジェクトをIHttpContextに渡すことができれば、とても良いでしょう。
私はあなたの最初の答えを参照してください:) – ripper234
あなたはもっと頑張っていなければなりません:) –
1990年代からJavaを使用してきたのは、'01年以降のPythonです。
ここで私はJavaでダックタイピングを忘れたことはありません。
「ダックタイピングin Java質問」は、実際には多態性を完全に理解できないことです。ランタイム型の識別や "isinstance"機能が必要だと思ったことがあれば、多態性を把握できず、間違っています。
Programmer Ignorance Pet Peeveの質問を参照してください。多型を理解できないことは大きな問題であり、この「Javaでのダックタイピング」ミスにつながります。
多態性を理解している場合は、ダックタイピングは必要ありません。PythonとJavaを切り替えるときにそれを見逃すことはありません。
関連するノートでは、アサーションの一部としてPythonのisinstance()
を使用します。これは、整数でない整数を取得するときに整数を必要とする関数を作成するためです。 isinstance()
は、ダックタイピングのようなことをJavaで試みるときに使用されることがあります。
重要なのは、私が古くて(52)、それほどスマートではないということです。ですから、私はPythonで "強力な"クラス階層を維持する必要があります。そうしないと、混乱します。私は、必要になった場合、より厳密なクラス階層にリファクタリングするために、Pythonデザインに常にスペースを残しました。
isinstanceを使用することはダックタイピングではなく、実際にはダックタイピングを卑下します。 クラスA {メソッドfoo(){...}} クラスB {メソッドfoo(){...}} 関数not_duck_typed(x){if(x isinstance A){x.foo()} } function duck_typed(x){x.foo()} ダックタイピングのポイントは、共通の祖先を共有していないにもかかわらず、AまたはBのインスタンスをduck_typedに渡すことができます。正式なインタフェース。ダックタイピングはまだ多型です。 –
あなたは実行時の型識別/ isinstanceとダックタイピングを混同しています。 Javaでは、インターフェースは明示的に定義されています。アヒル型言語では、オブジェクトが公開するメソッドによって暗黙に定義されています。 –
(C#foreach
の場合のように)言語が設計上の脆弱性を回避しようとする場合以外は、メソッドシグネチャに基づいてダックタイピングを実行する必要はありません。一方、インターフェイスを使用したダックタイピングに似た何かをすると役立つ多くの状況があります。たとえば、IWalkLikeDuck
とIQuackLikeDuck
のインタフェースを実装するために制限されている汎用パラメータを持つメソッドUseDuck
がある場合、IWalkLikeDuck
とIQuackLikeDuck
の両方を実装するように制約されている汎用タイプの変数はUseDuck
に渡すことができます。しかし、コードが終了したらWowzo
に渡すことができる形式でコードを永続させるための良い方法はありません。他の両方のインターフェースから継承されたダックタイプのIWalkAndTalkLikeDuck
を定義できれば、IWalklikeDuck
とITalkLikeDuck
の両方を実装するクラスによって自動的に実装されると見なされるので、は非常に参考になります。 IWalkLikeDuck
およびITalkLikeDuck
をList<IWalkAndTalkLikeDuck>
に実装することがわかっていたすべてのタイプ。
- 1. 強く型付けされた言語の違いは?
- 2. 強く型付けされたクライアント側の言語ですか?
- 3. 強く型付けされた関数型プログラミング言語におけるモデル検査の妥当性?
- 4. 強く型付けされたURLアクション
- 5. 強く型付けされたRadioButtonlist
- 6. 強く型付けされたList.GroupBy()
- 7. ASP.Net MVC複数のモデルで強く型付けされたビュー
- 8. 本当に強く型付けされた型のプロバイダ
- 9. 強く型付けされたMVC3 Viewユーザーコントロールを宣言できません
- 10. C#MongoDBドライバは強く型付けされたフィルタの使用
- 11. バルク更新は強く型付けされたデータセットですか?
- 12. MongoDBドライバC#強く型付けされたネストされたインデックス
- 13. コントローラで強く型付けされたモデルの "キー"を取得
- 14. 動的型と強く型付けされた要素
- 15. は、モデルパラメータは、強く型付けされたコンテナモデル
- 16. javascriptなどのスクリプト言語は強く型付けされると効果がありますか?
- 17. 強く型付けされたデータセットは、CastException
- 18. 強く型付けされたカスタムヘルパーメソッドを作る方法は?
- 19. フォーマット強く型付けされた要素の値
- 20. つ以上のテーブル(強く型付けされた)
- 21. MVC HttpPost強く型付けされたモデルのヌル
- 22. 強く型付けされたenumのC++変換
- 23. オプションの強く型付けされたコンパイラ
- 24. MvcのQueryStringパラメータ強く型付けされたアクションリンク
- 25. ASP.NET強く型付けされたappsettings.jsonのオプション
- 26. エンタープライズライブラリの使用データアクセスアプリケーションブロック(強く型付けされたデータセット)
- 27. 強く型付けされたHTMLヘルパーのHTMLコード
- 28. タイムアウトの質問。強く型付けされたデータセットとオブジェクトデータソース
- 29. 強く型付けされたパラメータにC#の名前?
- 30. MVC6強く型付けされたアクションのリンクとビュー
強く入力するのではなく静的に入力することを意味すると思いますか? – Kylotan
キロタン、いいえ、それは矛盾します。動的<->静的、強い<->弱いです。 – Svante
私が知っているのは、それが私が作っていたことです。質問の文言は、強く型付けされた言語には、アヒルのタイピングがないことを意味しています。それらのいくつかは、すなわち。 Python。 – Kylotan