問題タブ [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.
type-safety - 強く型付けされた言語と静的に型付けされた言語の違いは何ですか?
また、一方が他方を意味しますか?
perl - ダック型言語で静的型付けの側面をシミュレートする
現在の仕事では、オブジェクトに大きく依存する一連の Perl スクリプトを作成しています。(Perl のbless()
ハッシュを使用して、可能な限り OO に近づけます)
さて、これをより適切に表現する方法がないため、私の会社のほとんどのプログラマーはあまり賢くありません。さらに悪いことに、彼らはドキュメントを読むのが好きではなく、他の人のコードを理解するのに問題があるようです。カウボーイコーディングはここでのゲームです. 彼らが問題に遭遇してそれを修正しようとするときはいつでも、実際には何も解決せず、通常は事態を悪化させる恐ろしい解決策を思いつきます。
これにより、率直に言って、ダックタイプの言語で書かれたコードを信頼していません。例として、オブジェクトの誤用に対して明示的なエラーが発生しないという問題が多すぎます。たとえば、 typeA
に memberfoo
があり、 のようなことをするとinstance->goo
、すぐに問題に気付くことはありません。null/未定義の値が返され、おそらく原因を見つけるのに 1 時間を無駄にするでしょう。その後、元の問題を適切に特定できなかったため、別のものを変更することになります。
そこで私は、スクリプト言語を維持し (その急速な開発が利点です)、オブジェクトが適切に使用されていない場合に明示的なエラー メッセージを表示する方法についてブレインストーミングを行っています。コンパイル段階や静的型付けがないため、エラーは実行時に発生する必要があります。ユーザーが「このオブジェクトには X がありません」という非常に明確な通知を受け取る限り、私はこれで問題ありません。
私の解決策の一部として、メソッド/変数を使用する前に存在するかどうかを確認する必要はありません。
私の仕事は Perl ですが、これは言語にとらわれない可能性があると思います。
programming-languages - コードがデータである静的型チェックを備えた言語を知っていますか?
静的な型チェックを行う言語 (Java など) と、コードがデータである言語 (LISP など) の名前を教えてください。1 つの言語で両方のことを意味します。
recursion - それ自体へのポインターを返すことができる関数を定義する方法は?
次のようなコードを書きたい:
これを完全にタイプセーフな方法にすることは可能ですか? C、C++、D、C#、Java、またはその他の静的に型付けされた言語を想定します。
static-typing - 動的型付け言語での洗練されたソリューションの例を知っていますか?
(型情報を除いて)まったく同じ構文を持つ2つの言語を想像してみてください。ただし、一方は静的に型付けされ、もう一方は動的型付けを使用します。次に、静的型付け言語で記述されたすべてのプログラムについて、すべての型情報を削除することにより、同等の動的型付けプログラムを導出できます。これは逆に必ずしも可能ではないため、動的に型付けされたプログラムのクラスは、静的に型付けされたプログラムのクラスよりも厳密に大きくなります。この動的型付けプログラムを呼び出しましょう。変数を型にマッピングして静的型付けにすることはありません。"実際の動的型付けプログラム」。
どちらの言語族も間違いなく完全なものであるため、このような実際の動的型付けプログラムには、まったく同じことを行う静的型付けプログラムが存在することは間違いありませんが、「経験豊富なプログラマーは、非常に洗練されたコードを記述できます。動的型付け言語」。したがって、私は自分自身に問いかけます。実際の動的型付けプログラムの良い例はありますか。同等の静的型付けプログラムは明らかにはるかに複雑で、「エレガント」ではありません(それが意味するものは何でも)。
そのような例を知っていますか?
programming-languages - 静的に型付けされた完全な Lisp バリアントは可能ですか?
静的に型付けされた完全な Lisp バリアントは可能ですか? このようなものが存在することに意味さえありますか?Lisp 言語の長所の 1 つは、その定義の単純さにあると私は信じています。静的型付けは、このコア原則を損なうでしょうか?
c# - foreach がインターフェイス型のコンパイル時の型チェックをスキップするのはなぜですか?
C# でループを使用するforeach
と、項目の型がインターフェイス型である場合、コンパイル時の型チェックが実行されないように見えます。
例えば
これは問題なくコンパイルされ、実行時に例外が発生します。コンパイル時に明らかな場合、これは意味がありません。項目の型SomeInterface
を別のクラスに変更すると、コンパイル時の型チェックが復元されます。
項目タイプがインターフェイスの場合、コンパイル時のタイプ チェックがないのはなぜですか?
(これは、Visual Studio 2008 の .NET 3.5 SP1 で発生します)
java - なぜJavaナンバーワン?
なぜJavaが最も使用されているプログラミング言語なのですか?なぜJavaのプログラマーの仕事が最も多いのですか?
ここで私を誤解しないでください?私はJavaが好きで、Javaで作業していますか?私はそれに反対するものは何もありませんか?
また、関数型プログラミングを備えたClojureのように、OOPボックスから他のことを学ぼうとしています。
しかし、私は疑問に思っています、なぜJavaが一番なのですか?つまり、動的言語(Ruby、Python、Php、JavaScript)の人々は、静的型言語(Java、C / C ++、C#)の人々は、生産性にうらやましいと言っていますか?彼らは彼らが仕事をより速く終わらせると言います...
では、動的言語の生産性が高いとしたら、どうしてJavaがその地位に立つのでしょうか。
scala - Scalaを使用してjava.util.Hashtable#putを呼び出す
昔ながらのハッシュテーブルを置くと、予期せぬ問題が発生しました。何が起きてる?
PS、質問はそのままですが、私には厄介な回避策があります:
java - Pythonの扱い方〜静的型付け?
私は Java の世界から来ましたが、コードのコンパイル中にエラーが発生しないこと以外に、Python の動的型付けの優れた点は何でしょうか?
Python のタイピングは好きですか? 大きなプロジェクトで役に立った例はありますか? ちょっとミスしやすいんじゃない?