変数の型を宣言する必要のない言語 (PHP や Perl など) の品質は、弱い型付けまたは動的型付けと呼ばれますか? 2つの用語について頭を悩ませています。
動的/静的型付けは型変換に関係するのに対し、弱い/強い型付けは変数の減速に関係するというのは正しいですか?
変数の型を宣言する必要のない言語 (PHP や Perl など) の品質は、弱い型付けまたは動的型付けと呼ばれますか? 2つの用語について頭を悩ませています。
動的/静的型付けは型変換に関係するのに対し、弱い/強い型付けは変数の減速に関係するというのは正しいですか?
によると:http://en.wikipedia.org/wiki/Type_system#Static_and_dynamic_type_checking_in_practice
弱い型付けとは、言語が使用されるときに型を暗黙的に変換(またはキャスト)することを意味します。
一方:
プログラミング言語は、実行時ではなくコンパイル時に型チェックが実行されるときに静的型付けを使用すると言われています。
したがって、強い/弱いと静的/動的は2つの異なる次元です。言語は強い/弱いものの1つであり、静的な動的の1つでもあります。たとえば、RubyとJavascriptはどちらも動的に型付けされますが、Rubyは強く型付けされ、Javascriptは弱く型付けされます。つまり、Rubyでは、次のコードでエラーが発生します。
1.9.2p290 :001 > 'a'+1
TypeError: can't convert Fixnum into String
一方、JavaScriptでは、次のようになります。
> 'a'+1
>> 'a1'
したがって、強く型付けされた言語では、2つの変数を結合するために同じ型に変換する必要があります(たとえば、1.to_sを使用)。一方、弱い型付けの言語は、追加のビルドを使用して2つの変数を同じ型に強制しようとします。 -言語ロジックの場合-JavaScriptの場合、文字列と何かを組み合わせると、文字列値に変換されます。
詳細については、 http ://www.artima.com/weblogs/viewpost.jsp?thread=7590を参照してください。
簡単に言えば、強い型付けは、オブジェクトの宣言方法よりも、オブジェクトのバインド方法 (本質的に早期バインディングと遅延バインディング) に関係しています。
C#でこのクラスがあるとしましょう:
public class Foo
{
public int Bar;
public double Baz;
}
そして、foo 型の変数を宣言します。
var myFoo = new Foo();
Foo を参照すると、次のようになります。
foo.
を入力するBar
と、Visual Studio は と を含むリストを表示します。タイプです。これは強い型付けです。つまり、Bar や Baz のスペルを間違えると、プログラムがコンパイルすらできなくなるということです。 Baz
.
myFoo
Foo
ただし、型の変数を宣言するとしましょう。dynamic
これにより、プログラムが実行されるまでオブジェクトバインディングが延期されます。
dynamic myFoo = new Foo();
myFoo.Grapes = 6;
これはコンパイルされます。プログラムが実行されるまでエラーは発生しません。に Grapes が存在しないため、実行時例外がスローされFoo
ます。