問題タブ [static-language]
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.
scripting - 静的にコンパイルされた言語はスクリプト言語に取って代わることができますか?
動的インタープリターを取得できると仮定します。静的にコンパイルされた言語はスクリプト言語を置き換えることができますか? なぜ誰かがスクリプト言語を使用するのか、まったく理解できませんでした。私が話しているのは PC であり、単純なインタープリターを必要とする限定されたシステムではありません。私はいくつかの Python インストール スクリプトを見て、問題に対する同様の Python および C# ソリューションを見ました。では、なぜスクリプト言語を使用するのでしょうか。
注: C# について気になることがありますが、代わりに C# を使用しない理由を尋ねているわけではありません。スクリプト言語を使用する理由を尋ねています。静的にコンパイルされた言語は、デバッグがはるかに簡単で、多くの場合、コーディングが簡単です。
compiler-construction - 動的言語と静的言語 (この 2 つを同じ場所にまとめることはできますか)
プログラミング言語は、「動的」と「静的」の 2 つの主要なクラスにグループ化されます。-これは、プログラミング言語が両方ではなく一方にある場合に常に当てはまりますか?つまり、言語は同時に動的と静的になることができますか?
design-patterns - OOPと動的型付け(静的vs動的ではない)
静的に型付けされた環境(RubyとC#など)とは対照的に、動的に型付けされた環境では、どのOOP原則が適用されたり、異なって適用されたりしませんか?これは静的対動的な議論の呼びかけではありませんが、どちらか一方に適用され、他方には適用されない、どちらかの側に受け入れられた原則があるかどうか、または異なる方法で適用されるかどうかを確認したいと思います。「継承よりも構成を優先する」などのフレーズは、静的に型付けされたOOPの文献でよく知られています。それらは動的な側面にも同じように適用できますか?
たとえば、動的に型付けされた環境では、結合の粒度はメソッドのレベルを超えないように見えます。言い換えると、特定の関数呼び出しは、呼び出し元をその特定のインターフェイスに結合するだけです。これは、クラスが満たす可能性があります。言い換えると、特定のアヒルのように鳴くものはすべてです。
一方、Javaでは、結合の粒度はパッケージと同じくらい高くなる可能性があります。特定のメソッド呼び出しは、別のクラス/インターフェースとのコントラクトを確立するだけでなく、それをそのクラス/インターフェースのパッケージ/jar/アセンブリに結合します。
このような違いは、異なる原則とパターンを生み出しますか?もしそうなら、これらの違いは明確にされていますか?Ruby Pickaxeの本には、この方向に少し進むセクションがあります(Duck Typing / Classes Are n't Types)が、他に何かあるのではないかと思います。Rubyのデザインパターンを知っていますが、読んでいません。
編集-Liskovは静的環境と同じように動的環境に適用しないと主張されてきましたが、私はそれが適用されると考えずにはいられません。一方では、クラス全体との高レベルの契約はありません。しかし、特定のクラスへのすべての呼び出しは、リスコフが規定する方法で子クラスが満たす必要がある暗黙のコントラクトを構成するのではありませんか?次のことを考慮してください。「いくつかのバーのことをする」の呼び出しは、子クラスが参加する必要がある契約を作成します。これは「特殊なオブジェクトを基本クラスのように扱う」場合ではありませんか?
java - 動的または静的言語に関してC C++ Javaを説明できる人はいますか
動的型付け言語または静的型付け言語に関して C C++ Java を説明できる人はいますか。
C C++ と Java はすべて静的言語であるとどこかで読みました。しかし、これらについては他の意見があることを思い出します。非常に混乱。
ありがとう!
c# - Re-Sharper が「暗黙的に型指定されたローカル変数を使用する」というメッセージを表示するのはどのような前提の下ですか?
私の理解では、C# は静的言語として始まり、.NET フレームワークにいくつかの機能拡張が加えられ、言語の動的な性質をサポートし始めました。
C# の "var" キーワードは、実行時に DLL をロードする場合に非常に強力であり、型がどのようなものになるかわからない場合に非常に役立ちます。
しかし、変数が設計時に var として宣言されている場合、変数の型を決定するオーバーヘッドが生じると思います。さて、いくつかの素晴らしい提案を行うことで、コードをより良く、よりきれいにする責任がある re-sharper は、以下のような提案をしてくれました:
私のコードは次のようになります。
Resharper は、に変換する必要があることを示唆しています。
何故ですか?良い考えではないと思うのに、なぜ resharper の提案を購入する必要があるのですか? それとも私が間違っているのでしょうか?
dynamic - Clojure は Uni-Typed ですか?
Robert Harperは、 「動的言語は静的言語である」という興味深い記事を書きました。その中で彼は次のように書いています。
そして、これこそまさに動的型付け言語の問題点です。型を無視する自由を与えるのではなく、単一の型への注意を制限するという束縛を課します! すべての値はそのタイプの値でなければなりません。選択の余地はありません!
これは、 uni-typed languagesを意味するようになりました。(単一タイプの言語)。
現在、Clojureは動的言語であると主張しています。
Clojure は、Java 仮想マシン (および CLR、JavaScript) を対象とする動的プログラミング言語です。汎用言語として設計されており、スクリプト言語の親しみやすさとインタラクティブな開発を、マルチスレッド プログラミング用の効率的で堅牢なインフラストラクチャと組み合わせています。Clojure はコンパイル済み言語です。JVM バイトコードに直接コンパイルされますが、完全に動的なままです。Clojure がサポートするすべての機能は、実行時にサポートされます。
「動的」とは、「型を持たない」というよりも、「実行時に対話できる」ことを意味します。
現在、静的と動的の間で行われている重要な違いは、「コンパイル時に型エラーを取得できますか?」ということのようです。
次の Clojure コードを記述した場合:
次に、Leiningen でコンパイルします。
次に、次のようになります。
これは、動的言語でのコンパイル時の型エラーのように見えます。
私の質問は次のとおりです。Clojure は Uni-Typed ですか?
編集 - 私はcore.typedを知っています- これは優れた作品です。それとは別に質問します。
java - 静的言語でコーディングする際のスタイルガイド
私は現在、ジュニア エンジニアであり、ベスト プラクティスの学習と経験の拡大に熱心に取り組んでいます。私の質問は、Java、C#、C++ などの静的プログラミング言語に関するものです。
コードを書くときは、読みやすくするのが好きです。私の意見では、コードを読むことは本を読むようなものであるべきです。流暢でエレガントでなければなりません。次に、それらを使用する必要がない場合でも、できる限りthis
, super
–<code>base キーワードを先頭に追加するのが好きです。定数または静的変数/メソッドを使用する場合は、現在のクラス名についても同様です。
その結果、別の開発者がすぐに大穴を狙う可能性があります。彼は、宣言に移動する必要なく、このメソッドまたは var が現在のクラスまたはマザー クラスにあることを知っています。あなたは私に、最近の IDE でそれを行うのは本当に簡単だと言うかもしれません。しかし、Vim、Emacs、またはこれらの凝った機能を持たない他のエディタをいまだに使っている人をたくさん知っています。
説明するときは、自分の練習を演劇本に例えるのが好きです。シェイクスピアのマクベスなど、少なくとも 1 つは読んだことがあります。本の冒頭に戻って、その人物が誰で、彼がプロットのどの部分を担っているかを知ることに不満を感じたことがない人はいますか? あなたはそれを何度もしましたよね?
私の質問は、読み書きのできるプログラミングの実践に関連している可能性があります。ただし、Donald Knuth の推奨事項は、コードへのコメントとマクロの追加に関するものだと思いました。
そのため、これらの慣行に関するご意見やご感想をお聞かせいただければ幸いです。私はやりすぎですか?もっとシンプルにしておくべきですか?OOP ルールに違反していますか?
コードサンプルは次のとおりです。
methods - 静的に型付けされた言語の多境界メソッド?
すみません、タイトルがちょっと間違っています。メソッドバインディングについて考えていたので、この質問が出てきました。いくつかの疑似コードの例..
この機能をサポートする静的言語はありますか?
-> 両方のタイプの z への参照の解決。
それとも、論理的な問題があり、それは不可能ですか?
profiling - Hack/PHP での静的型付けと動的型付けのプロファイリング
私はハックで働いており、ファイルのヘッダーに応じて言語が動的タイピングと静的タイピングの両方をサポートするため、「入力するとコードがより速く実行されるか」を理解しようとしています。
この 2 つの効率の違いを確認するには、どのようなテストを実行しますか?