LoginSignup
44
39

More than 5 years have passed since last update.

プリミティブ型って何だ?

Last updated at Posted at 2014-04-28

時々目にする「プリミティブ型」というのは何を指しているのだろうか。
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では、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等の場合は、紛らわしいので使わないのがよいだろう。
実際、値型と参照型を区別することはあっても、プリミティブかどうかを区別したい機会は基本的に無い。

44
39
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
39