静的型付けと動的型付けの違い

目次

静的型付けと動的型付けの違いのまとめ

型の決定 対象 代表的な言語
静的型付け コンパイル時
実行前に型エラー検出するので安全性は高い
大規模開発向け
型宣言が必要
Java, C#, TypeScript, Rust
動的型付け 実行時
実行中に型エラーが発生するので安全性は低い
素早いプロトタイピング向け
型を気にせず書ける
Python, JavaScript, Ruby, PHP

静的型付け = 安全性・信頼性重視、大規模開発に向く

動的型付け = 柔軟性・開発スピード重視、小規模・スクリプトに向く

静的型付け

  • 変数を宣言する時やメソッドの引数や戻り値を指定するときにデータ型を指定します。
  • データ型は、コンパイル実行時等のプログラムを実行する前に決定されます。
  • 決定されたデータ型の変数には、そのデータ型の値を代入します。
    →文字列型を宣言した変数には、文字列型の値を代入します。
    →データ型の使用方法が間違っていた場合、コンパイルエラーで教えてくれます。メリットです。
  • プログラム言語のJavaやC#は、静的型付け言語です。

Java

Javaのコードのサンプルです。

package test1;

public class Test1 {
	public static void main(String[] args) {

		String test1 = "あいうえお";
		System.out.println(test1); // あいうえお

		//test1 = 12345;  // コンパイルエラー
		System.out.println(test1); // 
	}
 }

6行目は、変数のデータ型はStringと宣言して値を代入しています。
9行目のように、数値型の値を変数に代入しようとするとコンパイルエラーになります。
→プログラム実行前にチェックされています。

動的型付け

  • 変数のデータ型はプログラム実行時前に決定されません。
  • 変数に文字列型の値を代入後、数値型の値を代入できます。
  • プログラム言語のJavaScriptやPythonは、動的型付け言語です。

JavaScript

JavaScriptのコードのサンプルです。

<script>

	var test1 = "あいうえお"
	console.log(test1); // あいうえお

	test1 = 12345
	console.log(test1); // 12345
	
</script>

3行目は、変数のデータ型は宣言されていません。変数に文字列型の値を代入しています。
6行目は、文字列型として使用した変数に、数値型の値を代入しています。
Javaとは異なりエラーにならず、実行できます。

静的型付け言語のC#の型推論

  • varは、コンパイル時に型を推論し、変数に具体的な型を割り当てます。
    →静的型付け + 型推論
  • 実際にはvarという型があるわけではなく、コンパイラが自動的に本来の型に置き換えるイメージです。

C#

C#の 型推論のサンプルです。

using System;

class Test1
{
	static void Main()
	{
		var test1 = "あいうえお";
		Console.WriteLine(test1); // あいうえお

		//test1 = 12345;  // コンパイルエラー
		Console.WriteLine(test1);
	}
}

7行目は、文字列型の値を変数に代入しています。
10行目のように、数値型の値を変数に代入しようとするとコンパイルエラーになります。
→変数のデータ型は文字列型になっています。

関連の記事

UnicodeとUTF-16とUTF-8の違い(秀丸で文字コードを確認)

△上に戻る