2013-06-12 11 views
10

強く弱く型付けされた言語を扱うwikiページhttp://en.wikipedia.org/wiki/Strong_and_weak_typingを含むいくつかのページを読んでいます。ほとんどの場合、私はその違いを理解していると思う。しかし、私は2つを区別するポイント答えにまっすぐにしたいです。強く型付けされた言語の違いは?

弱い型の言語では、データ型を明示的に呼び出す必要はありません。これはMatlabのような言語で、タイプキャストすることなく4と2.3を追加できます。強く型付けされた言語は、プログラマが各変数および/または値に対してデータ型を宣言することを必要とする。たとえばCでは、4 +(int)2.3または(float)4 + 2.3(それが有効なC型キャストであるかどうかはわかりません)のようなことをする必要があります。

これらの概念の理解を拡大したり修正したりする情報は、非常に高く評価されます。

+0

この質問は、どこかで[理論計算機等のためのより良いフィットかもしれませんかしら科学](http://cstheory.stackexchange.com/)または[プログラマー](http://programmers.stackexchange.com/)...? – summea

+0

さて、どこに置くべきかわからなかった。私はそれを追加します。 – Josh

+0

Cでは 'float'に' int'を追加するのは完全に合法です。 –

答えて

8

Eric Lippertさんのブログをチェックしてください。あなたが探しているものについてのエントリがありますhere

ブログの見方からすれば、これらの用語は主観的なものなので、「タイプシステムの機能についてもっと正確に話してください。」

2

あなたが言ったように... ...弱く型付けされた言語では、データ型を明示的に呼び出す必要はありません。

強く型付けされた言語では、プログラマは変数および/または値ごとにデータ型を宣言する必要があります。例えば

これは正しいです...

タイプが必要な場合は、宣言やプログラマが望んでいたことが可能なC#のような、いわゆる「強く」型付け言語のパラダイムの一種でもあります... C#には "var"型がありますが、この言語を使用する多くのプログラマが好む強力な型(Int32、String、Booleanなど)もあります。

このようにして、言語は「強く」タイプと「弱い」タイプの両方になります。

私は、これがこの概念の理解を進めることができます願っています...

+1

C#のvarは変数の "文字列"型を保持していることに注意してください。型名isn – dlev

22

違いは、変数の型を宣言する話ではありません。それより少し微妙です(そしてペース Eric Lippert、私はこの用語が合理的に明確に定義されていると思います)。コンパイル時には、すべての式がコンパイル時に決定できる型を持っています。この型に適した操作だけが可能です

タイプのない(「弱く型付けされた」批評家で、ファンに「動的に型付けされた」)言語では、そうではありません。この言語は、どのようなタイプのオペレーションも実行することができますが、オペレーションが失敗する可能性がかなりあります。つまり、の言語が操作を許可している可能性がありますが、ランタイムはそうでない場合があります。

すべての型宣言を必要とせずに強く型付けされた言語を使用できることに注意してください。確かに、強く型付けされた言語はありません。ジャワのこのビットを考えてみましょう:

String s = "hellO"; 
int l = s.getBytes().length; 

コンパイラは.lengthが合法であると判断しない方法は?それはbyte[]で使用されているので合法です。しかし、ここにはbyte[]というものは何も宣言されていません。コンパイラはsStringであることを知り、Stringにを呼び出すと、byte[]が得られます。 s.getBytes()のタイプがbyte[]であり、そのためlengthを要求することが合法であるという事実から推測されます。

Javaよりも洗練された型システムを持つ言語の中には、これ以上推論できるものがあります。

val s = "hello" 
val l = s.getBytes().length 

をコンパイラは中間式のと同様、slの種類を推測します:たとえば、Scalaで、あなたが言うことができます。種類を明示的にもたらしたというのがファンシーな方法である、マニフェストなされなければならないので、強い型付けが、(Javaのような)冗長型宣言が必要な型推論の人工制限があり

言語は、を入力マニフェストを有すると記載されています生きている、それは書き留めたと言う素晴らしい方法です。

+1

強/弱タイプは、静的/動的タイプとは直交しています。たとえば、Rubyタイプのシステムは強力で動的です。 – ComDubh

0

強く型付けされた言語は、操作を実行する前に変数の型をチェックしますが、弱い型付けの言語はそうではありません。

例: JAVA(強く型付けされた言語):

int i = 10; 
boolean b = true; 
System.out.println(i + b); //compile error. Can't add int with boolean 

C(弱く型付け言語):

int i = 10; 
bool b = true; 
printf("%d" i + b); //Prints 11 
関連する問題