問題タブ [static-typing]

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 に答える
2144 参照

design-patterns - OOPと動的型付け(静的vs動的ではない)

静的に型付けされた環境(RubyとC#など)とは対照的に、動的に型付けされた環境では、どのOOP原則が適用されたり、異なって適用されたりしませんか?これは静的対動的な議論の呼びかけではありませんが、どちらか一方に適用され、他方には適用されない、どちらかの側に受け入れられた原則があるかどうか、または異なる方法で適用されるかどうかを確認したいと思います。「継承よりも構成を優先する」などのフレーズは、静的に型付けされたOOPの文献でよく知られています。それらは動的な側面にも同じように適用できますか?

たとえば、動的に型付けされた環境では、結合の粒度はメソッドのレベルを超えないように見えます。言い換えると、特定の関数呼び出しは、呼び出し元をその特定のインターフェイスに結合するだけです。これは、クラスが満たす可能性があります。言い換えると、特定のアヒルのように鳴くものはすべてです。

一方、Javaでは、結合の粒度はパッケージと同じくらい高くなる可能性があります。特定のメソッド呼び出しは、別のクラス/インターフェースとのコントラクトを確立するだけでなく、それをそのクラス/インターフェースのパッケージ/jar/アセンブリに結合します。

このような違いは、異なる原則とパターンを生み出しますか?もしそうなら、これらの違いは明確にされていますか?Ruby Pickaxeの本には、この方向に少し進むセクションがあります(Duck Typing / Classes Are n't Types)が、他に何かあるのではないかと思います。Rubyのデザインパターンを知っていますが、読んでいません。

編集-Liskovは静的環境と同じように動的環境に適用しないと主張されてきましたが、私はそれが適用されると考えずにはいられません。一方では、クラス全体との高レベルの契約はありません。しかし、特定のクラスへのすべての呼び出しは、リスコフが規定する方法で子クラスが満たす必要がある暗黙のコントラクトを構成するのではありませんか?次のことを考慮してください。「いくつかのバーのことをする」の呼び出しは、子クラスが参加する必要がある契約を作成します。これは「特殊なオブジェクトを基本クラスのように扱う」場合ではありませんか?

0 投票する
5 に答える
18892 参照

scala - What is the purpose of type ascriptions in Scala?

There's not much info in the spec on what type ascription is, and there certainly isn't anything in there about the purpose for it. Other than "making passing varargs work", what would I use type ascription for? Below is some scala REPL for the syntax and effects of using it.

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

scala - Scalaで無名関数の戻り型を指定することは可能ですか?

私はあなたが無名関数を作成し、コンパイラにその戻り型を推測させることができることを知っています:

静的型付けのためだけに、その戻り型も指定することは可能ですか?それは物事をより明確にするだろうと思います。

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

hash - Boo: ハッシュの型を明示的に指定する

私はBooが初めてで、ハッシュのタイプを宣言する方法を理解しようとしています。私がする時:

コンパイラは、「メソッドはオブジェクトのメンバーではありません」と不平を言います。ハッシュの値の型がわからないことがわかりました。

文句を言わないように、ハッシュのキーと値の型をコンパイラに宣言する方法はありますか?

0 投票する
5 に答える
43804 参照

java - Java キャスティングはオーバーヘッドをもたらしますか? なんで?

あるタイプのオブジェクトを別のタイプにキャストするときにオーバーヘッドはありますか? それとも、コンパイラがすべてを解決するだけで、実行時のコストはかかりませんか?

これは一般的なことですか、それとも異なる場合がありますか?

たとえば、Object[] の配列があり、各要素が異なる型を持っているとします。しかし、たとえば、要素 0 が Double であり、要素 1 が String であることは常に確実にわかっています。(これが間違った設計であることはわかっていますが、これを行う必要があったと仮定しましょう。)

Java の型情報は実行時に保持されますか? または、コンパイル後にすべてが忘れられ、(Double)elements[0] を実行すると、ポインターをたどって、それらの 8 バイトを double として解釈します。

Java で型がどのように処理されるかについては、よくわかりません。おすすめの本や記事があれば、それもよろしくお願いします。

0 投票する
5 に答える
7165 参照

programming-languages - どの言語が動的に型付けされてコンパイルされますか(そしてどの言語が静的に型付けされて解釈されますか)?

動的型付けと静的型付けについて読んでいると、静的に型付けされた言語はコンパイルされ、動的に型付けされた言語は解釈されるという仮定に反し続けます。私は一般的にこれが真実であることを知っていますが、私は例外に興味があります。

これらの例外の例をいくつか挙げるだけでなく、これらの言語がこのように機能することが決定された理由を説明してもらいたいと思います。

0 投票する
10 に答える
78302 参照

terminology - 静的/動的 vs 強い/弱い

これらの用語がプログラミングのいたるところで使われているのを目にしますが、それらが何を意味するのか漠然とした考えを持っています。検索すると、実際にスタックオーバーフロー全体でそのようなことが尋ねられていることがわかります。私の知る限り、言語の静的/動的型付けは、強い/弱い型付けとは微妙に異なりますが、その違いが何であるかはわかりません。情報源が異なれば、異なる意味を使用しているようであり、用語を同じ意味で使用しているようです. 両方について話し、実際に違いを説明している場所を見つけることができません。誰かが私と他の世界のためにここでこれを明確に説明してくれたらいいのですが.

0 投票する
9 に答える
11160 参照

programming-languages - 動的な、おそらく弱い型付けを備えたコンパイル済み* プログラミング言語はありますか?

動的および/または弱い型付けを特徴とする、マシン コード/バイナリ (VM によって実行されるバイトコードではなく、型付けを考慮するとまったく異なるもの) にコンパイルされるプログラミング言語があるかどうか疑問に思いました。

次のようなコンパイル済み言語を考えてみてください。

  • 変数を宣言する必要はありません
  • 実行時に変数を作成可能
  • 関数はさまざまな型の値を返すことができます

質問:

  • そのようなプログラミング言語はありますか?
  • (なぜだめですか?

動的でありながら強力な型付けされたコンパイル済み言語は本当に理にかなっていると思いますが、それは可能ですか?

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

language-agnostic - 静的に型付けされ、埋め込み可能なスクリプト言語はありますか?

静的に型付けされた組み込み可能なスクリプト言語があるかどうか疑問に思っています。Python、JavaScript などは優れた言語ですが、動的に型付けされます (つまり、型は実行時にチェックされます)。C++ アプリケーションに埋め込むことができる静的に型付けされたスクリプト言語を誰かが知っているかどうか疑問に思っています。

0 投票する
8 に答える
260709 参照

type-safety - 強く型付けされた言語と静的に型付けされた言語の違いは何ですか?

また、一方が他方を意味しますか?