問題タブ [static-binding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
1300 参照

python - パラメータのタイプに応じて異なるアクションを実行する方法

Java のような静的バインディングを使用する言語では、すべて同じ名前でパラメーターが異なる複数の関数を定義できます。Python を学んでいて、今までこれがないことを主に「安全上の問題」と考えていました (likeは引用符のためにbool_parameter="False"解釈される可能性がTrueあります)。もっと気をつけないといけないなと思いました。

ここで、静的バインディングの欠如が単に不便である状況を見つけました。このタペルを検討してください:

静的バインディングを使用してアイテムを削除するには、次のvarようにすることができます (疑似コード:

実行する適切なアクションを選択するために条件が必要ないため、これは非常に便利だと思います。さらに、このコードにより、関数の 1 つまたは両方をオーバーロードすることを決定できるため、オーバーロードが容易になります。

Python でこのような状況に対処しようとすると、型をチェックする if 句のような不便な解決策しか見つかりません。

より良い方法はありますか?

0 投票する
2 に答える
197 参照

c++ - テンプレートが静的バインディングであるにもかかわらず、古いコードのオブジェクト ファイルが汎用プログラミング パラダイムを使用する新しいコードを使用できるのはなぜですか?

これは私が以前に尋ねたものとはまったく異なる質問であるため、これを投稿しています。

私のトピックは、「なぜ」と「どのように」を説明する答えを生み出す主観的な質問であると定義したいと思います. これは、ヘルプ センターの規則に従って許可されています。

私の質問をより建設的にするために、私のトピックをよりよく説明するリソースを提供します。

質問の下のC++ SuperFAQから

「仮想関数 (動的バインディング、動的ポリモーフィズム) とテンプレート (静的ポリモーフィズム) が大きな違いを生む簡単な理由を教えてください。」

著者は次のように述べています。オブジェクト ファイルと、曾曾祖父が書いたソース コードだけが 25 年前に失われたとしても、その古代のオブジェクト ファイルは何もせずに新しい拡張子を呼び出します。バラバラ。"

彼は続けて、「それが拡張性であり、強力な再利用可能な抽象化のための OO とジェネリック プログラミングです」と述べています。

さらに、私は最近、C++ の作成者である Bjarne Stroustrup によって書かれた論文「なぜ C++ は単なるオブジェクト指向プログラミング言語ではないのか」を読みました。彼の論文では、言語または技術がオブジェクト指向であると定義するのは、それが次のことを直接サポートしている場合に限られます。

  1. 抽象化 – 何らかの形式のクラスとオブジェクトを提供します。

  2. 継承 - 既存のものから新しい抽象化を構築する機能を提供します。

  3. ランタイム ポリモーフィズム – 何らかの形式のランタイム バインディングを提供します。

また、ジェネリック プログラミングについても簡単に言及しています。

6.7 ジェネリック プログラミング - 過去数年間の C++ コミュニティの主要なテーマは、テンプレート メカニズムを活用する技術の開発でした。

これら 2 つのリソースを読むと、オブジェクト指向のパラダイムによって古いコードが新しいコードを使用できることがわかります。ただし、ジェネリック プログラミングは静的バインディングを使用するため、ジェネリック プログラミング (この場合はテンプレート) を使用して、古いコードが新しいコードを使用する方法がわかりません。私の以前の関連する質問から、Ben Voigtは次のようにコメントしました。

「古い」テンプレート コードを「新しい」テンプレート コードと組み合わせるには、両方を一緒にコンパイルする必要があります。

C++ SuperFAQは、新しいコードを使用するために古いコードを新しいコードで再コンパイルする必要はなく、古いコードのオブジェクト ファイルのみが必要であることを (OO とジェネリック プログラミングの両方で) 暗示しているようです。これにより、コードの再利用性が維持されます。

テンプレートが静的バインディングであるにも関わらず、古いコードのオブジェクト ファイルが汎用プログラミング パラダイムを使用する新しいコードを使用できる「理由」と「方法」について誰かが答えてくれませんか?

編集

以下の回答をもう少し詳しく説明したいと思います. ジェネリック プログラミングは静的バインディングを使用するため、コードの再利用性を有効にするには、古いコードのソース コードと新しいコードのソース コードの両方を"一緒に"再コンパイルする必要があります。つまり、古いコードのオブジェクト ファイルしかない場合、実行時にバインドする動的/遅延バインディングが必要になるため、新しいコードを使用することはできません。

0 投票する
2 に答える
207 参照

java - ケース: 静的バインディング? ダイナミックバインディング?

オーバーロードは静的バインディングを使用し、オーバーライドは動的バインディングを使用することを知っています。しかし、それらが混在している場合はどうなりますか?このチュートリアルによると、メソッド呼び出しを解決するために、静的バインディングは型情報を使用し、動的バインディングは実際のオブジェクト情報を使用します。

sort()では、次の例では、どのメソッドを呼び出すかを決定するために静的バインディングが行われているのでしょうか?

.

.

ps: 出力は次のとおりです。 Child#sort(Collection c) is invoked

0 投票する
3 に答える
38 参照

c++ - const 参照変数と非 const 参照変数の場合、どの関数を呼び出すかはいつ決定されますか?

次の関数を検討してください

この場合、関数呼び出しが関数定義にバインドされている場合、1 つは左辺値iであり、もう 1 つはそうでないため、コンパイル時または実行時になりますか?

この 2 つの関数以外は、パラメーターの数と型に関しては同じです。

0 投票する
2 に答える
257 参照

java - Java でのバインド (メソッドと「フィールド」のオーバーライド)

クラス B はクラス A のサブクラスであり、C は B のサブクラスです。

  1. タイプのオブジェクトを参照しているのにP1タイプからのコール1で、コール2でオブジェクトへの参照として動作しているのはなぜですか?Print1Print2Print2

  2. なぜ Call 2print(B b)は fromPrint2ではなく from で呼び出されるのprint(C c)ですか?

これは、これまでJavaで最も混乱していたことです。ご協力ありがとうございました。