プリミティブ型
プリミティブ型(プリミティブがた 英語: primitive data type、プリミティブデータ型)は、データ型の1分類である。理論計算機科学的に代数的データ型によって考えれば「そのデータ型の定義の中に部分として他の[1]型を含まないような型」がプリミティブ型であるが、Javaにおいて型が「primitive types(プリミティブ型)とreference type(参照型)」に二分されることにひきずられたと思われる2分法などが信じられていることも多い[要出典]。
この記事におけるここから先の説明は、最初に説明した理論的な分類に従ったものではなく、よく信じられているらしい[要出典]「プログラミング言語によって提供されるデータ型であり基本的な要素である。対する語は複合型という。言語やその実装に依存して、プリミティブ型がコンピュータメモリ上のオブジェクトと一対一対応のときもあれば、そうでないときもある。組み込み型もしくは基本型とも呼ぶ。」という解釈に従ったものである。
代表的なプリミティブ型を一部列挙:
- 文字型 (
character
,char
); - 整数型 (
integer
,int
,short
,long
,byte
)(各種の精度のものがある); - 浮動小数点数 (
float
,double
,real
,double precision
); - 固定小数点数 (
fixed
) (各種の固定精度やスケール指定可能なものがある)。 - 真値と偽値をもつブーリアン型(ブール代数)。
- 参照型 (ポインタまたはハンドルとも言われる)、オブジェクトを参照する小さな値で、そのオブジェクト自身よりも大きな容量のオブジェクトも扱える。
プリミティブ型にもなりうる、より高度な型を一部列挙:
プリミティブ型が最も高速な演算を行える言語構成要素である場合が多い。例として整数の加算は、単一マシン命令として演算され、プロセッサによっては単一マシン命令で文字列を処理する具体的な命令を提供している。特に、C言語標準では「plainなint型オブジェクトのサイズは実行環境のアーキテクチャに依存する」とされている。これは、32ビットアーキテクチャではint型が32ビットになりえることを意味する。
Smalltalkではプログラムによって拡張されたプリミティブデータ型を許可しており、それらの型の演算命令を追加することもでき、場合によっては言語固有の演算命令を再定義することもできる。
.NET
.NET Frameworkの共通言語ランタイム (CLR) では、System.Type.IsPrimitive
プロパティによって、型がCLRプリミティブ型であるかどうかを判定できる[2]。各.NET言語の組み込みの値型は必ずしもCLRプリミティブ型ではないが、CLRプリミティブ型はすべて値型である。
例えば、十進浮動小数点数型System.Decimal
は値型(構造体)であり、C#の組み込み型decimal
でもあるが、CLRプリミティブ型ではない。ポインタまたはハンドルを表すときに使用されるプラットフォーム固有の型System.IntPtr
は値型であり、CLRプリミティブ型でもあるが、C#の組み込み型ではない。
CLRプリミティブ型は共通中間言語 (CIL) 上で専用の命令を持つなどの特別な性質がある。
JavaScript
ECMAScriptにおけるデータ型はUndefined
, Null
, Boolean
, String
, Symbol
, Number
, Object
の7種類である[3]。この7種類が慣例的にプリミティブ型と呼称される。
注
- ^ 正確には「他の型(自身を含む)を含まない」である(再帰データ型の考慮)。
- ^ Type.IsPrimitive Property (System) | Microsoft Docs
- ^ The ECMAScript language types are Undefined, Null, Boolean, String, Symbol, Number, and Object. ECMAScript® 2019 Language Specification - ECMAScript Data Types and Values