5

With Java on one side and Ruby/Groovy on the other, I know that in the second camp I'm free to make typos which will not get caught until run-time. Is this true of all dynamically-typed languages?

Edit: I've been asked to elaborate on the type of typo. In Ruby and in Groovy, you can assign to a variable with an accidental name that is never read. You can call methods that don't exist (obviously your tests should catch this, it's been said). You can refer to classes that don't exist, etc. etc. Basically any valid syntax, even with typographical errors, is valid in both Ruby and Groovy.

4

4 に答える 4

3

Pythonはtypo-friendly、質問で説明した方法です。

しかし、これは、これらの「タイプミス」が実行時にのみキャッチできることを意味するものではありません。pylint(理想的には開発環境に統合されている)のようなコードアナライザーを使用する場合、 「実行」を押す前に、これらの「ほとんど」を一貫してキャッチします。

于 2010-03-11T23:15:46.127 に答える
3

Perl では、use strictコードで宣言する場合は、変数を で宣言する必要がありますmy。変数名のタイプミスは、コンパイル時に検出されます。これは、Python でコーディングするときに私が見逃している最大のものの 1 つです。

于 2010-03-11T22:26:07.690 に答える
2

ほとんどの場合、はい。動的型付けと変数の宣言を必要としないことは、一緒に見つかることが多い言語プロパティです。

ただし、これらは本質的に関連しているわけではありません。言語は、使用前に変数名を宣言する必要がある一方で、動的型付けを簡単に行うことができます。ire_and_curses が言及しているように、これは「use strict」ディレクティブを介して Perl で実現できます。

于 2010-03-11T22:39:48.313 に答える
2

動的言語Smalltalk 80の 2 つの実装であるSqueakDolphinで言及された落とし穴に入ろうとすると、次のようになります。

読み取られることのない偶発的な名前の変数に割り当てることができます

Smalltalk 言語では、一時変数とインスタンス変数を宣言する必要があります。未定義の変数を含むメソッドをコンパイルしようとすると、コンパイル エラーが発生します。

| anArray |
anArrray := Array with: 2 with: 1. "Unknown variable anArrray"

変数を動的に作成することは、動的言語が許可する必要があるものではありません。型のない宣言とまったく宣言がないことには違いがあります。


存在しないメソッドを呼び出すことができます

完全に不明なセレクター (つまり、メソッド名)を使用すると、コンパイラーは警告を出します。

paintを実装するシステムに別のクラスがあるため、配列でメソッドを呼び出しても、コンパイラは気にしませんpaint。そのエラーは実行時にのみキャッチされます。

ただし、メソッドを呼び出すとsortt(呼び出しようとしているときにsort)、コンパイラは警告を生成します。トップダウンで開発する場合は、これらの警告を無視して続行できます。

| anArray |
anArray := Array with: 2 with: 1.
anArray paint. "Runtime error. You can't paint an array but perhaps a Shape"
anArray sortt. "Compile-time warning"

存在しないクラスを参照できる

これは許可されていません。ただし、Squeak では、必要に応じてエラー ダイアログから新しいクラスをすばやく作成できます。

于 2010-03-11T23:04:05.740 に答える