私は、プログラミング言語が静的または動的に型付けされることが知られている、または静的に型付けされた言語と動的な言語、または動的に型付けされた言語と動的な言語の両方であると見なされるのはいつであるかという概念に頭を悩ませようとしています。
私が混乱しているのは、Java の場合、コンパイル時に変数の型が既知または定義されているときに、言語が静的に型付けされていることがわかっている場合です。
//Java illustration of statically typed
int x, y; //explicit type declaration
x = 5, y = 10; //Now we use the variables
//Groovy illustration of statically typed
def x, y //explicit type declaration
x = 1, y = 10 //now we use the variables
さまざまなオンライン ソースを読むことに基づいて、静的に型付けされていると見なされる言語のリストには、Groovy は含まれていませんが、Java と C++ が含まれているとのことです。
また、Groovy が動的言語の場合 (DL の定義 - DL はコンパイル時にチェックをほとんどまたはまったく行わない言語であり、代わりに実行時にチェックが行われます)。これは、Groovy も動的型付け言語であることを意味するのではないでしょうか。変数が動的型付けと見なされるのは、「変数の型がコンパイル時ではなく実行時にわかっている場合」だからです。
//Illustration of a language being dynamically typed according to DT and DL definition
x = 5 //directly using the variable (exceptable in Python and PHP but not in Java/Groovy)
Groovy がそうである場合、Groovy が静的に型付けされている上記のコード図は、実行時にチェックが行われるという Groovy の定義と矛盾します。
これは、変数を直接使用するとJavaとgroovyの両方でコンパイラエラーがスローされるため、両方のJava groovyが動的型付け言語ではないことを意味しますか?
間違っている場合は修正してください。あなたの例をコードの図で提供してください。