問題タブ [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 投票する
38 に答える
176194 参照

oop - インターフェイスと基本クラス

いつインターフェイスを使用し、いつ基本クラスを使用する必要がありますか?

メソッドの基本実装を実際に定義したくない場合は、常にインターフェイスにする必要がありますか?

犬と猫のクラスがある場合。PetBase の代わりに IPet を実装する必要があるのはなぜですか? ISheds または IBarks (IMakesNoise?) のインターフェイスを持つことは理解できます。これらはペットごとに配置できるためですが、一般的な Pet にどちらを使用すればよいかわかりません。

0 投票する
15 に答える
4366 参照

class - 静的なダック型言語はありますか?

メンバーを宣言するときにインターフェイスを指定できますか?

この質問についてしばらく考えた後、静的ダック型の言語が実際に機能する可能性があることに気づきました。定義済みクラスをコンパイル時にインターフェイスにバインドできないのはなぜですか? 例:

そのような機能をサポートする言語を知っていますか? Java または C# で役に立ちますか? 何らかの形で根本的に欠陥がありますか?MyClass をサブクラス化してインターフェイスを実装したり、Adapter デザイン パターンを使用して同じことを達成したりできることは理解していますが、これらのアプローチは不必要なボイラープレート コードのように思えます。

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

prototyping - 強い型付けと弱い型付けの意味と、どちらが優れているか教えてもらえますか?

強い型付けと弱い型付けの意味と、どちらが優れているか教えてもらえますか?

0 投票する
1 に答える
3392 参照

.net - ジェネリック型のジェネリック クラスに拡張メソッドを適用する

私はvb.netのジェネリッククラスを扱っていました。
また、拡張メソッドは、型を指定しないとジェネリック クラスに適用できないようです。

私はこのジェネリッククラスを持っています

これで結構です

これは OK ではありません (IDE では定義されていないエラー T が表示されます)。

これは、.Net の静的チェックと関係がありますか。
「Type T でやってみても、互換性がないかもしれないので、やらせません」と。

PSジェネリッククラスとして私が取ったこのすべての痛みは、別のライブラリから来ており、さまざまな場所で使用されています。継承したジェネリック クラスにこのメソッドを継承して追加することには、あまり注意がありません。

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

.net - Script.Net vs Nemerle

アプリにスクリプトを組み込むことを検討していました。その後、Script.NetNemerleに出くわしました。私はそれらが異なる構文を持っていることを知っています.Nemerleはマクロをサポートしていますが、Script.Netはサポートしていません. しかし、機能、使用法、柔軟性の点での違いについてもっと知りたいです。そして、どれをお勧めしますか、なぜですか?

ありがとう。

申し訳ありませんが、Nemerle 自体が言語であることに気付きませんでした。記述はスクリプト言語のようです。混乱を招いて申し訳ありません

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

functional-programming - モナドを実装する言語は静的に型付けされなければなりませんか?

私は関数型プログラミングスタイルを学んでいます。Don't Fear the Monadsで、Brian BeckmanはMonad について素晴らしい紹介をしました。彼は、Monad は複雑さに対処するための関数の合成に関するものであると述べました。

Monad には、unit型 T を増幅された型 M(T) に転送する関数が含まれています。T から M(U) への関数を指定すると、型 M(T) を別の型 M(U) に変換する Bind 関数。(U は T である可能性がありますが、必ずしもそうとは限りません)。

私の理解では、モナドを実装する言語は静的に型チェックする必要があります。そうしないと、コンパイル中に型エラーを見つけることができず、「複雑さ」が制御されません。私の理解は正しいですか?

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

unit-testing - 自動化された単体テストは静的型チェックに取って代わることができますか?

単体テスト/テスト駆動開発のアイデア全体を調べ始めましたが、考えれば考えるほど、静的型チェックと同様の役割を果たしているように思えます。どちらの手法も、プログラム内の特定の種類のエラーに対するコンパイル時の迅速な応答チェックを提供します。ただし、私が間違っている場合は訂正してください。ただし、完全にカバーされた単体テスト スイートは、静的型チェックでテストされるすべてのものをテストし、次にいくつかをテストするようです。別の言い方をすれば、静的型チェックは、プログラムが正しいことを「証明」する方法の一部にすぎませんが、単体テストでは、必要なだけ (ある程度まで) 「証明」できます。

では、単体テストも使用している場合、静的型チェックを備えた言語を使用する理由はありますか? ここで似たような質問がありましたが、もう少し詳しく説明したいと思います。単体テストに対する静的型チェックの具体的な利点は何ですか? コンパイラの最適化やインテリセンスなどの問題がいくつか思い浮かびますが、これらの問題に対する他の解決策はありますか? 私が考えていない他の利点/欠点はありますか?

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

python - サブクラスでの Python 引数の検証

いくつかの python 引数を検証しようとしています。Python 3.0 で新しい静的型付けを取得するまで、これを行う最善の方法は何ですか。

これが私が試みていることの例です:

ご覧のとおり、デコレータはクラスへの入力の型チェックを適切に実行していますが、すべての引数を 2 番目のクラスに定義する必要があり、複数レベルの継承があると非常に厄介になります。kwargs を使用してある程度の成功を収めることはできますが、上記の型チェックのアプローチほど適切ではありません。

基本的に、kwargs リストから 1 つの引数を取り出してその型をチェックし、残りをその親に渡したいのですが、これはスケーリングに応じて非常に柔軟でクリーンな方法で行います。

助言がありますか?

0 投票する
7 に答える
10927 参照

compiler-construction - 静的に型付けされたLua

コンパイル時に型チェックされるLuaフロントエンドコンパイラを探していますが、標準のLua 5.1バイトコード(実行時型のみ)を出力します。私が欲しいのは、実行時よりも早く些細なエラーを検出するために、かなりの量の静的なコンパイル時の構文解析とオプションの型付けです。結果のバイトコードは、標準のLoadString()でコンパイルされた既存のLuaバイトコードとうまく連携する必要があります。

明確にするために、違いはバイトコンパイル時にのみ発生します。実行時に、バイトコードは、コンパイルフェーズ中に何か別の/異常なことが起こったことを認識しません。

私が考えていることは、ActionScriptによく似ています。Luaバイトコードを出力するActionScriptコンパイラも気になりません!

誰かがそのような努力について聞いたことがありますか?MetaLuaを使用してこれを行うことへの言及をいくつか見ましたが、正直なところ、私は彼らのドキュメントの先頭を作るのに十分な明るさ​​ではありません

0 投票する
17 に答える
17386 参照

c# - なぜ C# は静的に型付けされるのですか?

私は C# を学ぼうとしている PHP Web プログラマーです。

変数を作成するときに C# でデータ型を指定する必要がある理由を知りたいです。

クラスインスタンスの前にデータ型を知る必要があるのはなぜですか?