動的型付言語と静的型付言語の違いを、Pythonを動的型付言語の例に、Javaを静的型付言語の例にしてコードで比較。
動的型付言語 (Python)
# 変数の宣言時に型を指定する必要がない
x = 10
print(type(x))  # <class 'int'>
x = "Hello"
print(type(x))  # <class 'str'>
# 関数の引数や戻り値に型を指定する必要がない
def add(a, b):
    return a + b
print(add(1, 2))  # 3
print(add("Hello", "World"))  # HelloWorld
静的型付言語 (Java)
public class Main {
    public static void main(String[] args) {
        // 変数の宣言時に型を指定する必要がある
        int x = 10;
        System.out.println(x);  // 10
        
        // x = "Hello";  // コンパイルエラー: 型の不一致
        
        // 関数の引数や戻り値に型を指定する必要がある
        int result1 = add(1, 2);
        System.out.println(result1);  // 3
        
        // String result2 = add("Hello", "World");  // コンパイルエラー: 型の不一致
    }
    
    public static int add(int a, int b) {
        return a + b;
    }
}
動的型付言語では、変数の宣言時や関数の引数・戻り値に型を指定する必要がありません。実行時に変数の型が決定され、同じ変数に異なる型の値を代入することができます。
一方、静的型付言語では、変数の宣言時や関数の引数・戻り値に型を指定する必要があります。コンパイル時に型チェックが行われ、型の不一致によるエラーを事前に検出できます。
このように、動的型付言語は柔軟性が高く記述が簡潔になる一方、静的型付言語は型の安全性が高くコンパイル時にエラーを検出できるという特徴があります。