プリミティブ型とは
プログラミングにおける
プリミティブ型(primitive data type)は、
データ型の最も基本的な分類であり、
基本データ型とも呼ばれます。これは、それ以上分解できない、最もシンプルな
データ構造を指します。
プリミティブ型の対義語として、
複合データ型(composite data type)があります。複合
データ型は、プリミティブ型や他の複合
データ型を組み合わせて作られる、より複雑な
データ構造です。例えば、
配列や
構造体などが複合
データ型に該当します。
プリミティブ型の特徴
定義: データ型の中に他のデータ型を含まない型。
処理: CPUが直接処理できる
データ型である場合が多い。
高速性: 一般的に、プリミティブ型の演算は高速に実行されます。
プリミティブ型の種類
プログラミング言語によって多少の違いはありますが、一般的にプリミティブ型として扱われるものには以下のようなものがあります。
文字型 (char)
1バイト、2バイト、4バイトなど、様々なサイズがあります。
文字セット(エンコーディング)は言語や処理系に依存しますが、UTF-8、UTF-16、UTF-32などが一般的です。
文字型の
配列によって
文字列型が実装されている言語もあります。
整数型 (int, short, long, byte)
1バイト、2バイト、4バイト、8バイトなど、様々なサイズがあります。
符号付きと符号なしの型が用意されている場合があります。
浮動小数点数型 (float, double)
単精度と倍精度の型が用意されていることが多いです。
IEEE 754規格に準拠しています。
固定精度やスケールを指定できるものがあります。
ブーリアン型 (boolean, bool)
真(true)または偽(false)の値を取る型です。
組み込み型
プログラミング言語には、プリミティブ型以外にも、あらかじめ組み込まれている
組み込み型があります。以下に代表的な組み込み型をいくつか紹介します。
ポインタ型
メモリ上のアドレス情報を保持する型です。
C/
C++では、整数値と相互に変換できます。
参照型
オブジェクトを参照するための型です。
ポインタ型と同様に、プリミティブ型よりも大きなサイズのオブジェクトを指し示すことができます。
ハンドル型と呼ばれることもあります。
参照型として扱われる組み込み型の例
配列
文字列
タプル (ML,
Python)
連結リスト (LISP)
複素数 (
Python)
有理数 (LISP)
関数 (第一級関数、クロージャ)
プリミティブ型は、言語によって扱い方や種類が異なります。以下にいくつかの言語での例を挙げます。
Smalltalk
Smalltalkでは、プログラムによって拡張されたプリミティブ型を許可しており、演算命令を追加したり、言語固有の演算命令を再定義したりすることも可能です。
Javaでは、以下の型がプリミティブ
データ型として規定されています。
`byte`
`short`
`int`
`long`
`float`
`double`
`boolean`
`char`
Javaのプリミティブ型はオブジェクトではないため、そのままではコレクションに格納できません。そのため、プリミティブ型をオブジェクトとして扱えるようにする
プリミティブラッパークラスが用意されています。
.NET (CLR)
.NETの
共通言語ランタイム (CLR) では、`System.Type.IsPrimitive` プロパティによって、型がCLRプリミティブ型かどうかを判定できます。CLRプリミティブ型はすべて値型ですが、各.NET言語の組み込み値型は必ずしもCLRプリミティブ型とは限りません。
例えば、`System.Decimal` は値型(
構造体)であり、C#の組み込み型 `decimal` でもありますが、CLRプリミティブ型ではありません。
ECMAScript (JavaScript)
ECMAScript (
JavaScript) におけるプリミティブ値は以下の7種類です。
Undefined
Null
Boolean
Number
BigInt
Symbol
* String
まとめ
プリミティブ型は、プログラミングにおける最も基本的な
データ型であり、効率的な処理を行うための重要な要素です。各言語によって多少の差異はありますが、その概念を理解することはプログラミングを行う上で不可欠です。