データ型
出典: フリー百科事典『ウィキペディア(Wikipedia)』
項目一部転記の提案:この項目はプリミティブ型との間で記事内容の一部転記が提案されています。一部転記に関する議論はノート:プリミティブ型を参照してください。 |
データ型(でーたがた、data type)とは、コンピュータにおけるデータの扱いに関する形式のことである。データタイプとも。データ型は、プログラミングなどにおいて変数そのものや、その中に代入されるオブジェクトや値が対象となる。
目次 |
[編集] 型の役割
各変数のもつ型に応じて、それに適用される命令がコンパイルされていくという基本的な役割のほか、型に応じてコンピュータで扱いやすいバイナリで記憶したり(静的型付けのみ)、関数、式が持つ型同士の整合性を検査することによって、プログラムが正しく記述されていることや、安全に動作することの検証も可能であり、現在、様々な型の応用が研究されている(型理論)。
[編集] 型の実装
- 詳細は型システムを参照
C言語等では変数宣言の際に明示的に型を宣言してプログラミングを行い、型の整合性がとれていないプログラムはエラーとなってコンパイルできない。一方、OCaml等の型推論をもった言語では明示的な型指定を変数宣言で行う必要が無く、コンパイラが自動的に各変数の型を計算した上で、型の検査を行ってくれる。たとえば a = 1 + 2 という代入文があれば整数同士の加算結果だからaは整数といった具合にあらゆる変数の型を決定していくわけである。
Perl等の言語ではプログラマは型を指定せず、1つのプログラム内で適用される演算によって文字列型変数として振る舞ったり、整数型変数として振る舞ったりする。このような変数ではなくデータの方に型をもつ言語を動的型付けの言語という。
一般に動的な型付けを持つ言語では型の特性に合わせた最適化(例えば常に浮動小数点レジスタを用いるなど)ができないので、実行速度という面では静的型に劣ると考えられている。反面多態性や記述の容易さで動的型は融通が利き、Smalltalkなどのオブジェクト指向言語、スクリプト言語は動的型を採用するケースが多い。
動的型と静的型のどちらが安全なプログラムを記述できるのかは長年論争の的であるが、双方とも適した問題領域、適した開発スタイルが存在し、異なった安全観念を持つ点を理解しなければならない。
[編集] データ型の種類
なお、これは主な例である。このほかにもさまざまなデータ型が存在するし、プログラマ自身が新たな型を作る機能を有するプログラミング言語も多い。
[編集] 単純型
単純型とはプログラミング言語に元から存在する型である。組み込み型、原始型、プリミティブ型、基本型などと呼ばれることもある。全てのプログラミング言語がこれら全てを有するわけではない。プログラミング言語によってはライブラリが複合型として実現している型もある。
- 文字型/文字列型
- 数値型
- 整数型 - 整数を扱う型。負数の表現できる符号付き整数と、正数のみを扱う符号無し整数に別れている言語もある。
- 実数型 - 実数を扱う型だが、厳密に無理数や超越数を正しく扱えるわけではない。(理由は下の各項目を参照のこと。)
- 複素数型 - 複素数を扱う型。実数型があれば複合型として実現できるが、言語によっては単純型として用意している。
- 虚数型 - 純虚数のみを扱う型。実部が不要な分、記憶域や計算に必要なコストを抑えられる。
- 四元数型 - 四元数(クォータニオン)を扱う型。特に3次元コンピュータグラフィックスの処理で便利なため、言語によっては用意されていることがある。大抵のプログラミング言語ではライブラリにより複合型として実現される。
- 日付時刻型
- 日付型
- 時刻型
- 時間型
- バイナリ型 - バイナリデータを扱う型。言語によってはバイナリ型を持たずに数値型の配列(例えばCでは文字型の配列)で表現する場合がある。固定長バイナリと可変長バイナリに別れている言語もある。
- 論理型 - ブーリアン型、ブール型、ビット型などとも。真理値のみを扱う。
- オブジェクト型
- 配列型
- 関数型 - プログラミング言語が関数の概念を有していたとしても、関数型が存在するとは限らない。
- ポインタ型 - 参照型、ハンドル型などとも。ポインタ型と呼ぶ場合はポインタ演算の存在を期待されていることが多い。
配列型、関数型、ポインタ型はそれぞれ「~型の配列」、「…型を引数に取り~型を返す関数」、「~型へのポインタ」などと表現し、基にする型がしばしば存在する。そのためCとC++ではこれらを一括りにして「~型の派生型」と分類している。
[編集] 複合型
複合型とはプログラマがソースコードの記述などにより新たに作る型のことである。複合データ型、ユーザー定義型、参照型、リファレンス型などと呼ばれることもある。全てのプログラミング言語が複合型を作る機能を有するわけではない。
[編集] 関連項目
カテゴリ: 一部転記 | データ型 | プログラミング | データベース | メタデータ | コンピュータのデータ | コンピュータ関連のスタブ項目