タグ付けされた質問 「dynamic-typing」

動的型付けは、型チェックがほとんど実行時に実行されるプログラミング言語のプロパティです。

11
動的言語は常に解釈されますか?
ほとんどの(すべてではないにしても)動的言語(Python、PHP、Perl、Rubyなど)を見ると、それらはすべて解釈されます。私が間違っている場合は修正してください。コンパイル段階を経る動的言語の例はありますか?動的言語はインタープリター言語と同一ですか?

2
Optional / Maybe型は動的言語で役立ちますか?
Optional静的に型付けされた言語では明らかな方法で有用ですが、動的言語でも有用かどうか疑問に思っています。通常、あなたに言って何のコンパイラは「ねえ、あなたはこれを使用し、ありませんOptional<String>とStringあなたはまだ実行時にミスを発見する必要がありますので、」。私は静的な型付けの背景を持っており、私の観点からOptionalは、動的言語の型の利点を見ることができません。

10
開発者が動的に型付けされた言語で型を指定できないのはなぜですか?
私が知っている動的に型付けされた言語は、開発者に変数の型を指定させたり、少なくともそれを非常に限定的にサポートさせたりすることはありません。 たとえば、JavaScriptは、便利な場合に変数のタイプを強制するメカニズムを提供しません。PHPを使用すると、メソッドの引数のいくつかのタイプを指定できますが、ネイティブ型(使用する方法はありませんint、string引数のために、など)、および引数以外の型を強制する方法はありません。 同時に、手動で型チェックを行うのではなく、場合によっては動的に型付けされた言語で変数の型を指定する選択肢があると便利です。 なぜそのような制限があるのですか?技術的/パフォーマンス上の理由(JavaScriptの場合)なのか、政治的な理由(PHPの場合)なのか?これは、私がよく知らない動的に型付けされた他の言語の場合ですか? 編集:回答とコメントに続いて、説明の例を示します。プレーンなPHPに次のメソッドがあるとします。 public function CreateProduct($name, $description, $price, $quantity) { // Check the arguments. if (!is_string($name)) throw new Exception('The name argument is expected to be a string.'); if (!is_string($description)) throw new Exception('The description argument is expected to be a string.'); if (!is_float($price) || is_double($price)) throw new Exception('The price …

3
動的言語で書かれたコードをどのようにナビゲートしてリファクタリングしますか?
Python、Ruby、またはJavascriptを書くのに必要なボイラープレートが非常に少ないことが大好きです。シンプルな機能的構成が大好きです。簡潔でシンプルな構文が大好きです。 ただし、動的言語で大規模なソフトウェアを開発するとき、私が本当に苦手な点が3つあります。 コードのナビゲート 使用しているオブジェクトのインターフェイスを特定する 効率的なリファクタリング IDE(Eclipse + PyDev)と同様にシンプルなエディター(Vim)を試してきましたが、どちらの場合も、より多くのことをメモリにコミットする必要があります。インターフェース。これは、複数の依存関係を持つ大きなコードベースで作業する場合に特に当てはまります。 メソッド名の変更などのリファクタリングに関しては、単体テストの品質に大きく依存します。そして、アプリケーションの残りの部分を「カット」することによってユニットテストを分離しようとすると、スタブのインターフェイスがスタブしているオブジェクトに対して最新の状態に保たれるという保証はありません。 これらの問題には回避策があると確信しています。Python、Ruby、Javascriptでどのように効率的に作業しますか?

9
Webサイトの動的型と静的型の言語[非公開]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 このステートメントは、静的に型付けされた言語がWebサイトに理想的ではないことを示唆しています。 ウェブサイトの構築とは対照的です。Webページをレンダリングするとき、多くの場合、Webページで相互作用する非常に多くのコンポーネントがあります。ここにはボタンがあり、そこには小さなウィジェットがあり、ウェブページにはそれらの数十があり、ウェブサイトにはすべて動的な数十または数百のウェブページがあります。そのような非常に大きな表面積を持つシステムでは、静的に型付けされた言語を使用することは実際には非常に柔軟性がありません。おそらく、Scalaでプログラムを作成し、それを使用してWebページをレンダリングするのは、ボタンやその他のものをインタラクティブにプッシュしたいときに苦痛になるでしょう。システム全体で一貫性が必要な場合、たとえば、システム全体でボタンを移動できるようにするためだけに型チェックを行う必要がある場合、それは非常に柔軟性に欠けると考えます。 ソース:http : //www.infoq.com/interviews/kallen-scala-twitter これは正しいです?なぜですか?

5
動的言語はアジャイル開発にとって不利ですか?
私が読んだアジャイル開発から、コードをダイアグラムにリファクタリングまたはリバースエンジニアリングすることがよくあります。もちろんそれ以上のものがありますが、これら2つの方法に依存するプラクティスを考慮すると、動的に型付けされた言語は不利になりますか? 静的に型付けされた言語は、リファクタリングとリバースエンジニアリングをはるかに容易にするようです。 動的に型付けされた言語では不可能ではないにしても、リファクタリングまたは(自動化された)リバースエンジニアリングは困難ですか?現実のプロジェクトは、アジャイル手法のための動的に型付けされた言語の使用について何を教えていますか?

4
動的言語の開発
非常に単純な言語用にいくつかの手書きコンパイラを作成しましたが、今は単純化されたPythonやRubyに似た動的言語の開発に挑戦したいと考えています。しかし、コンパイラがどのように機能するかについて頭をかき回すのは簡単でした。プリミティブコンパイラは翻訳するだけです。しかし、言語が動的な場合、これを行うことはできません。実行時に情報を追跡し、より多くの作業を行うインタープリターまたはVMを作成する必要があります。 要するに、コンパイラがどのように機能するかを知っているが、インタープリターの作成に移行したいと考えているので、チェックアウトすべきリソースはありますか?動的言語用にいくつかのVMがありますが、自分でローリングしても問題ありません。これは私の個人的な経験のためだけです。 コンパイラーからインタープリターへの移行方法に関する情報を探しています。すでに言語Xのコンパイラーを作成しているが、今はインタープリターを作成する場合、何をする必要がありますか。また、プロセスを実行するリソースはありますか? コンパイラや仮想マシンの動作を網羅する幅広いリソースや抽象的なリソースは必要ありません。このテーマに関する教科書がたくさんあります。私がオンラインで見つけたすべてのリソースは、経験がないことを前提としているため、語彙分析または構文分析から始めるか、非常に抽象的です。動作するコンパイラはありますが、これをインタープリターに変換して、言語に動的機能を追加したいと考えています。 このプロセスでリソースを見つけることができませんでした。スコープが限定的すぎるか、理論的すぎずにインタープリターの「バックエンド」のリソースを見つけることができなかったため、ここに投稿しました。

2
Dynamic Language RuntimeとC#4.0の関係は何ですか?
現在の.NETプラットフォーム上に、おそらくSchemeインタープリターである動的言語コンパイラー/インタープリターを作成したいとしましょう。Dynamic Language Runtime(DLR)を使用するか、C#4.0を使用して言語の動的機能を実装する方が良いでしょうか?または、両方が必要ですか? 特にIronSchemeとIronPython に関して、この分野で他の作業が行われたことを知っています。これらの言語は両方ともDLRを使用します。IronPythonはDLRの最新バージョン(約1年前)を使用し、IronSchemeは初期バージョンのDLRの大幅に修正された初期のフォークを使用すると考えています。しかし、これらのコンパイラが作成されたとき、C#4.0は利用できませんでした。 C#4.0の動的な機能を使用したRob ConeryのMassiveでの作業を見てきました。とても印象的です。しかし、C#は動的言語コンパイラ/インタープリターの本格的な努力に耐えるでしょうか?C#にない機能がDLRにありますか、それともDLRは本質的にC#4.0に組み込まれましたか?C#4.0のみを使用した場合、DLRの重要な機能が失われますか?

4
動的で弱く型付けされた言語では、デザインパターンとOOPプラクティスに関する考え方がどのように変わりますか?
これらの線に沿ってすでにかなり役立つ質問があります(「非OOPデザインパターン?」)が、動的で型付けの弱い言語を始めたばかりの人の移行の観点について、私はもっと興味があります。 つまり、C ++、C#、またはJavaで長年プログラミングしており、GoFデザインパターン、エンタープライズアプリケーションアーキテクチャのファウラーパターン、SOLID原則などに沿って多くの知恵を吸収したとしましょう。 m Ruby、Python、JavaScriptなどに手を出し、自分の知識がどのように適用されるのか疑問に思う。おそらく私は多くの場合に直接翻訳を行うことができますが、ほとんど確実にそれは私の新しい設定を十分に活用していないでしょう。アヒルのタイピングだけでも、私のインターフェースベースの考え方の多くが頭に浮かびます。 何が変わりませんか?何が変わりますか?動的言語初心者が知っておくべき、SOLIDや標準パターン(おそらくまったく新しいパターン)などの基本原則はありますか?

6
静的型付けは、より大きなプロジェクトでどのように役立ちますか?
スクリプトプログラミング言語のサイトのメインページで好奇心をかきながら、次の文章に出会いました。 システムが大きくなりすぎて頭に残ることができない場合は、静的型を追加できます。 これにより、静的なコンパイル言語(Javaなど)と動的なインタープリタード言語(主に使用頻度が高いためPythonが主流ですが、ほとんどのスクリプト言語間で共有される「問題」)の間の多くの宗教戦争で、静的な不満の1つでした。動的に型付けされた言語に対する型付き言語のファンは、「いつか、関数の戻り値の型を忘れ、それを調べなければならず、静的に型付けされた言語ではすべてであるため、より大きなプロジェクトにうまくスケーリングできない」明示的に宣言されています。」 このような発言は理解できませんでした。正直に言うと、関数の戻り値の型を宣言したとしても、コードの多くの行を記述した後はそれを忘れることができ、その関数の検索関数を使用して宣言されている行に戻る必要があります。それをチェックするあなたのテキストエディタ。 さらにとして、関数がで宣言されているとしてtype funcname()...、知っwhitout typeあなただけ知っているので、あなたは関数が呼び出された各ラインを超える検索する必要がありますfuncnameしばらくPythonで、あなたのように、coudだけを検索def funcnameまたはfunction funcnameだけで、一度たまたま宣言。 さらに、REPLでは、関数の戻り値の型をさまざまな入力でテストするのは簡単ですが、静的に型付けされた言語では、コード行を追加し、宣言された型を知るためにすべてを再コンパイルする必要があります。 では、静的型付け言語の強みではない関数の戻り値の型を知る以外に、静的型付けは大規模なプロジェクトでどのように役立つのでしょうか。

5
静的および動的に型付けされた言語を、さまざまなタイプのジョブのさまざまなツールと見なすことはできますか?
はい、同様の質問がされていますが、常に「どちらが良いか」を見つけることを目的としています。 私は主にJavaScriptの開発者として思いついたので、静的型付け言語での記述に関する広範な経験がないので、私は尋ねています。 これにもかかわらず、低レベルのコードでの要求の厳しい操作を処理するためのCの学習には間違いなく価値があります(これは、コンパイラーレベルで静的と動的の関係があると思います)。特定のプロジェクトコンテキスト(特定の種類の動的なデータ集約型操作など)があるかどうかです。パフォーマンス以外にも、JavaやC#を使用するよりもPythonを使用するほうが理にかなっています。

3
Ruby(またはその他の動的言語)のインターフェイスの代わりに何を使用できますか?
私の目標は、クラス間のコントラクトを定義することです。 私はダックタイピングとすべてが好きですが、アプリケーションの異なるレイヤー間のインターフェースを定義して、外部から呼び出すメソッドと、他のレイヤーで使用してはならないアクセサリメソッドを明確に定義したいです。 たとえば、Javaでは、get()やsave()などのメソッドを使用してPersistorインターフェースを定義してから、データベースで永続化する必要のあるすべてのメソッドを使用してJdbcPersistorクラスを定義できます。また、リモートレストサーバーに保存するための他の方法を備えた別のRestPersistorもあります。 Rubyでインターフェイスを要求するのではなく、この区別を維持するためのきちんとした方法があるかどうかを確認するだけです。私はRubyが好きですが、Rubyを使用する小規模なプロジェクトにのみ取り組みました。

13
Webページ上のJavaScriptの静的に型付けされた代替は実用的でしょうか?
動的型付けと静的型付けの好みは主に好みの問題であり、さまざまな状況でさまざまな人々がそれらを多かれ少なかれ適しています。 私の質問は、クライアント側のWebページ拡張などのために、JavaScriptの静的型付けの代替を技術的に可能にすることは可能でしょうか?

3
ダックタイピングなしで動的に型付けされた言語を持つことは可能ですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 この質問はここで尋ねられましたが、不十分な回答を得て、問題を明確にしませんでした。私はそれが再びそれを求めることを正当化すると信じています。 動的に型付けされた言語または静的に型付けされた言語のいずれかでダックタイピングができることを理解しています(ただし、C ++のテンプレートなど、これらの例はまれです)。 しかし、ダックタイピングのない動的に型付けされた言語のようなものがあるかどうかはわかりません。 ダックタイピングとは、オブジェクトのタイプが、特定の時点でのオブジェクトの操作と属性に基づいていることを意味します。ダックタイピングを必然的にサポートせずに動的タイピングを行う方法はありますか? たとえば、このPythonコードを見てみましょう。 def func(some_object) some_object.doSomething() something = Toaster() func(something) 動的型付け言語では、オブジェクトの型は実行時にのみ認識されます。そのため、操作(例some_object.doSomething():)を実行しようとすると、ランタイムには選択肢が1つしかありません。これは、some_objectサポートのタイプかどうかをチェックするdoSomething()ことです。これは、正確にダックタイピングと同じです。 だから、ダックタイピングなしで動的に型付けされた言語を持つことは可能ですか?説明してください。

3
動的に型付けされた言語のプロシージャの途中で変数の型を変更するのは悪いスタイルですか?
変数に固定型がないPython(および場合によってはPHP)では、コードのロジックの途中で変数に対して「型変換」を頻繁に実行します。私は(必ずしも)単純なキャストについて話しているのではなく、基本的に同じ値またはデータを表すまま、変数の型を変更する関数について話しています。 たとえば、Webリクエストを実行するときに、response変数を使用してaddurlinfoオブジェクトを格納し、次にそのオブジェクトの文字列コンテンツ、および文字列をJSONとして解析して返されるディクショナリを次のようなコードで記述します。 response = urlopen(some_url) assert response.info().type == 'application/json' response = response.read() logger.debug('Received following JSON response: ' + response) response = json.loads(response) do_something(response) (さて、それは少し不自然な例ですが、私はそれがアイデアをうまく​​示していると思います)。これは、3つの個別の変数名を使用するよりも良いと思います。これは、a)response変数に基本的に同じ情報が含まれていること、別の型に「変換」されていること、b)以前のオブジェクトがそうではないことを伝えるためです。これらの変数を再割り当てすることで、後のコードで使用できなくなったため、関数のさらに下で必要になります。 トレードオフは、おそらく、ある時点で変数がどのタイプであるかについて読者が混乱する可能性があるということです。 これは悪いスタイルですか?上記の例では、1つに再割り当てする代わりに3つの異なる変数を使用する必要がありますか?また、これは動的に型付けされた言語での標準的な方法ですか?他の人のコードを知るのに十分なほど見ていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.