2011-12-05 6 views
2

私はかなりジュニアレベルの開発者(初年度のCS学生)です。静的型付き言語と動的型付き言語の違いについて学習しています。私が間違っていると私を訂正しますが、動的に型指定された言語はプログラマが型を与えずに変数を初期化し、後でその型をプログラムの中に与えることができます。好奇心のために、新しい変数を初期化せずにオブジェクトのタイプ/クラスを変更できる言語はありますか?変数の型を変更できる言語はありますか?

答えて

1

あなたが探しているものはweak typingだと思います。弱いタイピングと強いタイピングは静的タイピングと動的タイピングと同じではないことに注意してください。

0

すべては、新しい変数と呼ばれるものに依存します。たとえば、PHPの場合:

<?php 
$var = NULL; // $var is now of type null 
$var = 1; // $var is now of type integer 
?> 

などです。しかし、以前はNULL値を格納するために以前に使用されていたスペースが1を格納するために使用されているという保証はないので、あなたは同じ名前のまったく新しい変数を持っていると言うことができます。

0

タイプの定義方法によって異なりますが、JavasScriptには「クラス」がなく、インタフェースをオブジェクトに簡単に変更できます。

typeof dog // Dog 
cat = dog.turnIntoCat() 
typeof cat // Cat 

と私:

typeof dog // Dog 
dog.turnIntoCat() 
typeof dog // Cat 

は、しかし、ほとんどすべてのオブジェクト指向言語のようなものをサポートしています。私はあなたのような何かをすることを可能にする強力なオブジェクト指向の基礎と任意の言語を知らない

すべての動的に型指定された言語(私が知っているすべてのもの)がこれを許可すると思う:

typeof dog // Dog 
dog = new Cat() 
typeof dog // Cat 
0

ar静的/動的タイピングと強/弱タイピングの定義がたくさんあるので、一般的な質問に非常に具体的に答えることは難しいです。それは、私がそれらのために使う(非常に高いレベルの)定義は、一般的な考えをかなりうまく伝える傾向があると言われています(少なくとも私はそう考えています)。

動的型付け対静的

静的型付け言語は変数に種類が適用されます。変数countは整数として定義できます。整数値のみを保持できます。

動的に型指定された言語は、型をに適用しますが、変数は適用しません。値123は整数で、 "abc"は文字列ですが、変数resultは、異なる時点でどちらか一方または両方に割り当てることができます。

強く型付けされた言語で

を入力弱い対ストロングは、値が型を持ち、それが唯一のそのタイプです。たとえば、"123"は、文字列で、123が整数です。文字列を整数として扱うことはできず、その逆もできません。あなたはそれらの間で変換することができます(つまり、 "123" .toint()またはそのようなものですが、あるタイプを別のタイプとして扱うことはできません。「123」+ 456 == 579)

弱い型指定言語では、値は単なる値であり、使用に応じてさまざまな型として扱うことができます。たとえば、"123" + 234と言うことができ、有用な結果が得られます(言語に応じて357または123234)。

静的と動的の間、強弱の間には多くのグレーの領域がありますが、上記の定義は一般的な考え方を示します。

関連トピックでは、明示的なvs暗黙の型指定(プログラマが型を指定し、型がコンパイラの型を指定する)もあります。これはすべて自分自身で本当に面白い話題です。

関連する問題