私の意見では、静的型付けと動的型付けの違いはコーディングのスタイルに帰着します。Scala には構造型がありますが、プログラマーはほとんどの場合、トレイトのようなクールなガジェットを含むオブジェクトの型の観点から考えています。一方、Python/Javascript/Ruby プログラマーは、型とは少し異なる、オブジェクトのプロトタイプ (メソッドとプロパティのリスト) の観点から考えていると思います。
たとえば、Vehicle
サブクラスにPlane
、Train
、およびAutomobile
;という名前のクラスのファミリがあるとします。と呼ばれるクラスの別のファミリのAnimal
サブクラスには、、、Cat
およびDog
が含まれHorse
ます。Scala プログラマーは、おそらくTransportation
または という名前のトレイトを作成するでしょう。
def ride: SomeResult
def ride(rider: Someone): SomeResult
Train
メンバーなので、Horse
移動手段としても兼用できます。Python プログラマーは、追加のコードなしで train オブジェクトを渡すだけです。実行時に、言語はオブジェクトが をサポートしていることを認識しますride
。
メソッド呼び出しが実行時に解決されるという事実により、Python や Ruby などの言語は、プロパティまたはメソッドの意味を再定義するライブラリを持つことができます。その良い例は、O/R マッピングまたは XML データ バインディングで、未定義のプロパティ名がテーブル/XML 型のフィールド名であると解釈されます。これが「柔軟性」の意味だと思います。
動的言語を使用した私の非常に限られた経験では、間違いを犯さない限り、動的言語でのコーディングは高速だと思います。そしておそらく、あなたやあなたの同僚が動的言語でのコーディングに慣れてくると、ミスが減ったり、単体テストをより多く書き始めるようになるでしょう (幸運を祈ります)。私の限られた経験では、Scala が 1 秒でキャッチできる動的言語の単純なエラーを見つけるのに非常に長い時間がかかりました。また、コンパイル時にすべての型を使用すると、リファクタリングが容易になります。