プログラミング言語には「 データ型 」という概念があります。
変数の定義の仕方によってプログラミング言語は「静的型付け」「動的型付け」と二種類に分けられることを知ってる人もいるでしょう。
今回は、データの型とは何か?静的型付けと動的型付けの特徴、メリットデメリットについてお話ししたいと思います。
目次
データ型 とは何か?
プログラミングで扱うデータには「型」というものが存在します。
型とはコンピュータに「今扱っているデータがどんな種類のデータを扱っているか」を伝えるための仕組みです。
例えば「090-1234-5678」のようなデータを考えてみましょう。
大方の人は、これを見れば「電話番号を表す文字列だな」とピンとくるのではないでしょうか。
しかし、コンピュータはこのような判断ができません。
ハイフンの部分を引き算と解釈してしまい、「-6822」と計算した値を扱ってしまうかもしれません。
そのような事態を避けるため、コンピュータに「今扱っているのは数式じゃなくて文字列だよ」と教える必要があります。
それが「 データ型 」という考え方です。
データ型の指定は変数の宣言時に行うのが一般的です。
以下はJavaでデータ型を宣言する例です。
// データが文字列であることを「String」という型で指定する
String postalCode = "090-1234-5678";
// データが数値(整数)であることを「int」という型で指定する
int number = 090-1234-5678
System.out.println(postalCode); // 「090-1234-5678」と出力される
System.out.println(number); // 「-6822」と出力される
基本的な データ型 の種類
どのプログラミング言語にも備わってる基本的なデータ型というものがあります。
- 整数型
- 浮動小数点型
- 文字列型
- 論理型
「整数型」「浮動小数点型」は数値を扱うためのデータ型です。
「文字列型」は文字列を表すためのデータ型です。「’(引用符)」や「”(二重引用符)」でくくることで文字列型であることを明示します。
「論理型」というのが耳慣れないかもしれません。
簡単に言えば「真(true)」か「偽(false)」かの二者択一を表すデータ型です。
if分岐で利用するデータになります。
静的型付け言語
静的型付け言語とは、変数の宣言時に必ず型を明示しなければならない言語です。
全ての変数はコンパイル時点でなんのデータ型を扱うかが決定されます。
上述の電話番号のコードは、静的型付けの場合の記述例です。
JavaやC/C++などが代表的な静的型付け言語です。
動的型付け言語
動的型付け言語とは、変数の宣言時に型を明示しなくてもよい言語です。
プログラムの実行中に、データ型を都度チェックしながら処理を行います。
// 変数の宣言時に、型を明示しない
let a = 123;
let b = "456";
JavascriptやPython、Rubyなどが代表的な動的型付け言語です。
メリットとデメリット
静的型付け、動的型付けにもそれぞれメリット・デメリットが存在します。
静的型付け
- メリット
- コンパイル時にデータに整合性があるかをチェックしてくれる
- 事前に型チェックを行うため、実行処理が早い
- チームで開発するときに、どんなデータを扱っているかがソースコードだけで伝えられる
- デメリット
- 必ず型宣言しなければならないため、プログラムの記述量が多い
動的型付け
- メリット
- 型宣言する必要がないため、プログラムの記述が短く簡潔になる
- デメリット
- 事前にデータの整合性チェックをしないため動かしてみないとエラーがあるかわからない
- 実行時に型チェック処理が入るため、その分実行速度が遅くなる
- ソースコードを読んだだけでは、どんなデータを扱っているか分かりづらい
それぞれの得意分野
上記のようなメリットデメリットがあるため、
- 静的型付け言語は、大人数で手堅く開発する大規模システム向け
- 動的型付け言語は、少人数で素早く開発する小・中規模システム向け
というように整理することができます。
ちょっとややこしいケース
プログラミング言語の中には「型推論を備えた静的型付け言語」と呼ばれるものがあります。
これは「コンパイラがデータ型を推測してくれるので、プログラマーが明示的に型宣言をしなくていい」言語です。
このような言語ではScalaが有名です(JavaもJava 10 以降で型推論をサポートするようになりました)。
val a = 123; // コンパイラが「整数型」だと推論してくれる
val b = "456"; // コンパイラが「文字列型」だと推論してくれる
動的型付け言語のような簡潔で楽な書き方ができる一方で、静的型付け言語の「コンパイル時の型チェック」「実行速度の向上」というメリットを享受できるいいとこ取りの言語になります。
あくまでコンパイラが型を推論してくれるので型宣言しなくてよいだけで、本質的には静的型付け言語(実行前にデータ型が決まる)であるということを理解しておきましょう。
まとめ
今回は静的型付け言語と動的型付け言語の違いについて説明しました。
それぞれメリットデメリットがあるため、用途に合わせて使い分けるのが大事です。
プログラミング言語を学習する際には、今学習している言語が静的型付けか動的型付けかを意識しながら勉強してみると、さらに理解が深まると思います。