時々目にする「プリミティブ型」というのは何を指しているのだろうか。
Javaと.NETについて調べてみた。
いつも通り、コメントは大歓迎です。
「うちの言語のプリミティブ型はこれだぜ」ってのがあればコメントください。
一般的に
Wikipediaによると
- 言語によって提供されるデータ型
- 対する語は複合型
らしい。
よくわからん。言語が複合型を提供することはないのか。
Java
Javaの場合は値型のことをプリミティブ型と呼ぶようだ。
具体的にはboolean
, int
, float
, char
などである。
String
は含まない。
(読み飛ばしてたが「技術的にはプリミティブじゃないが、プリミティブと考えてもいいかも」的なことがかいてある。
技術的にはプリミティブってなんだ。その定義をするのが仕様だろ。値型って意味じゃないぞ)
.NET
Stackoverflowの記事 を参考にする。
CLRの場合
.NETのType
型にはIsPrimitive
というプロパティがある。
http://msdn.microsoft.com/en-us/library/system.type.isprimitive.aspx
CLRの場合、Javaのようなint
等に加えてポインタ型をプリミティブ型と呼ぶようだ。
CLRでは、enum
やstruct
も値型であるが、これらはプリミティブ型とは呼ばない。
VB.NETの場合
VB.NETの場合は、Javaのようなint
等に加えてString
やDate
もプリミティブ型と呼ぶようだ。
http://msdn.microsoft.com/ja-jp/library/aa711900.aspx
CLR上はプリミティブであるポインタ型は含まない。
これはおそらく.NET以前のVBの名残だと思われる。
C#の場合
上記のStackoverflowの回答では、int
等に加えDecimal
がプリミティブだと書いてある。
しかしECMAの仕様を検索したところ(Ctrl+F
が壊れていなければ)C#にはプリミティブの定義が無い。
http://www.ecma-international.org/publications/standards/Ecma-334.htm
追記:C#でもプリミティブの定義はあるようだ。コメント参照
まとめると
Javaの場合は、Objectではない型を指す。
C#, VB等の場合は、紛らわしいので使わないのがよいだろう。
実際、値型と参照型を区別することはあっても、プリミティブかどうかを区別したい機会は基本的に無い。