More than 1 year has passed since last update.

時々目にする「プリミティブ型」というのは何を指しているのだろうか。
Javaと.NETについて調べてみた。

いつも通り、コメントは大歓迎です。
「うちの言語のプリミティブ型はこれだぜ」ってのがあればコメントください。

一般的に

Wikipediaによると

  • 言語によって提供されるデータ型
  • 対する語は複合型

らしい。

よくわからん。言語が複合型を提供することはないのか。

Java

Javaの場合は値型のことをプリミティブ型と呼ぶようだ。
具体的にはboolean, int, float, charなどである。
Stringは含まない。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

(読み飛ばしてたが「技術的にはプリミティブじゃないが、プリミティブと考えてもいいかも」的なことがかいてある。
技術的にはプリミティブってなんだ。その定義をするのが仕様だろ。値型って意味じゃないぞ)

.NET

Stackoverflowの記事 を参考にする。

CLRの場合

.NETのType型にはIsPrimitiveというプロパティがある。
http://msdn.microsoft.com/en-us/library/system.type.isprimitive.aspx

CLRの場合、Javaのようなint等に加えてポインタ型をプリミティブ型と呼ぶようだ。
CLRでは、enumstructも値型であるが、これらはプリミティブ型とは呼ばない。

VB.NETの場合

VB.NETの場合は、Javaのようなint等に加えてStringDateもプリミティブ型と呼ぶようだ。
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等の場合は、紛らわしいので使わないのがよいだろう。
実際、値型と参照型を区別することはあっても、プリミティブかどうかを区別したい機会は基本的に無い。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.