型なし言語の欠点

以前から動的言語の型宣言がないことの欠点は何かを疑問に思っていたが、2点ほど気がついたのでメモ。問題が発生するのは以下のケース。

  1. 既に使用されている変数を使おうとしてスペルをミスした場合
  2. ある変数を追加するときに、同じスコープ内に同じ名前の変数が既に存在していた


1.のケースでは、変数を参照するのであれば初期化されていないのでエラーが発生して気づくが、代入として使用すると気づかない。思った通りの動作をしない。2.のケースでも思った通りの動作をしないし、デバッグしないと気づかない。


2.のケースでは、オブジェクトのアトリビュートとして新たな変数を追加する場合、スコープの範囲がわりと広い可能性があるのでやっかいである。オブジェクトに後付でアトリビュート軽率に追加するのはまずいと思われる。
単なるローカル変数でも1.よりも2.のケースの方が以外と気づきにくいかもしれない。