はじめに
学校の授業でPHPを習った際、「PHPは動的型付けだから、型は指定しなくていいですよ〜」と教わりました。気になったので深く調べたところ、動的型付け、静的型付け、型推論など色々と混在していしまいました。そこで、図にしてみたところ、やっと理解できたので記録しておきます。同じような疑問を持つ方の助けになればと思います。
静的型付け・動的型付け・型推論 について
プログラミング言語には多種多様な特性があり、その中の一つに「型の扱い方」が挙げられます。以下の図のようにして静的型付けと動的型付けに分けられます。
静的型付け言語 (C言語, TypeScript, Swift ...)
コンパイルまでの段階で型が定義・検証される言語を静的型付け言語
と言います。静的型付け言語では、コンパイル時に型のチェックが行われ、型の不一致があればエラーとなります。このため、実行前に多くのエラーを発見できるといった利点があります。
例:C言語では、変数を使用する前にその型を指定する必要があります。( int number;
など )
~型推論~
静的型付けのうち、プログラマが型を明示的に宣言しなくてもコンパイラが自動で変数の型を推測する機能を型推論
といいます。型推論によりコードが簡潔になり、型を手動で管理する手間が減少しますが、プログラマが意図した型と異なる型が推論される可能性もあります。
例:SwiftやTypeScriptではlet number = 5;
のように変数を宣言するだけで、コンパイラが自動的にnumber
がint
であると判断します。
動的型付け言語(Python, Ruby ...)
変数の型をプログラムの実行時に検証・決定する言語を動的型付け言語
といいます。静的型付けと違い、コンパイル時ではなく、実際にプログラムが動作する際に型の安全性をチェックします。動的型付け言語では、型を事前に定義する必要がなく、より柔軟なプログラミングが可能ですが、実行時に型のエラーが発生するリスクもあります。
最後に
自分がよく使うFlutterやSwift, C言語は静的型付けであることがわかりました。これから AIを勉強するのにPythonを勉強し始めますが、これまで触ってきた言語とは違い、動的型付け言語であるということに注意してコーディングしていこうと思います。