プリミティブデータ型についての私の理解は、
言語によって暗黙的に提供されるデータ型です(その他はユーザー定義クラスです)。
そのため、言語によって、その特定の言語の原始的と見なされるデータ型のセットが異なります。そうですか?
「基本データ型」と「組み込みデータ型」の違いは何ですか。ウィキペディアによると、プリミティブデータ型は2つのうちのどちらかです。
PS-「文字列」型がSNOBOL4ではプリミティブ型と見なされ、Java?と見なされないのはなぜですか?
言語に依存します。
たとえば、CやC++などの言語では、組み込みスカラー型がいくつかあります-int
、float
、double
、char
などこれらは、より単純なコンポーネントに分解できないという意味で「プリミティブ」です。これらの基本型から、ポインタ型、配列型、構造体型、共用体型などの新しい型を定義できます。
次に、すべてがatomまたはlistのいずれかである、昔ながらのLISPのような言語があります。この場合も、上記の定義では、atomは、より単純なものに分解できないという意味で「原始的」です。
編集
私に関する限り、「プリミティブ」、「基本」、および「組み込み」という用語はほとんど同じ意味で使用できます。ただし、really pedanticを取得したい場合は、「組み込み」の型(言語定義で明示的に提供される型)と、まだ組み込まれている組み込み型から派生した型を区別できます。 「プリミティブ」または「基本」は、より単純な要素に分解できないことです。 Cのtypedef
機能を使用すると、既存の型の新しい型名を作成できます。 Adaを使用すると、制約のある新しいスカラー型を作成できます。たとえば、組み込みの浮動小数点型からLatitude型を派生させることができますが、[-90.0、90.0]の範囲外の値を取ることはできません。単純なコンポーネントに分解できないという点で、プリミティブ型または基本型のままですが、ユーザー定義であるため、「組み込み」型とは見なされません。
繰り返しますが、これらの概念は少しあいまいであり、実際にはコンテキストに依存します。たとえば、「組み込み」タイプの概念は、BLISSのようなタイプのない言語では意味がありません。
Javaの観点から:
Javaでは、プリミティブ型と非プリミティブ型の間に非常に明確な違いがあります。
プリミティブ型の変数には、その型の値が直接含まれています(つまり、値型です)。
非プリミティブ型の変数には、値が直接含まれていません。代わりに、それはオブジェクトへの参照(ポインターに似ています)です。 (Javaでは、ユーザー定義の値タイプを作成することはできません)。
Javaには8つのプリミティブ型があります:byte
、short
、int
、long
、char
、boolean
、float
およびdouble
。その他はすべて非プリミティブ型です。
プリミティブは、他のデータ型から構築されていない基本的なデータ型です。単一の値のみを表すことができます。すべてのプリミティブは必要に応じて組み込みデータ型です(コンパイラーはそれらについて知る必要があります)。ただし、すべての組み込みデータ型がプリミティブであるとは限りません。
一部の言語では、コンパイラーは他のものから構築された特定の型の組み込みの知識を持っています。それは、特殊な方法でそれらを処理できる必要があるためです。例としては、DelphiおよびVisual Basicのバリアント(およびBooの同等の「Duck」)と、ほとんどのOO言語の基本オブジェクトクラスがあります。
「文字列」型がSNOBOL4ではプリミティブ型と見なされ、Javaではなく)と見なされるのはなぜですか?
Java言語仕様は、JavaのコンテキストでWordの「プリミティブ」が何を意味するかを非常に明確に指定しており、JavaのString
はこの仕様に準拠していませんが、SNOBOL4言語仕様は、SNOBOL4のコンテキストで「プリミティブ」が何を意味するかを定義し、SNOBOL4の文字列はその仕様に準拠しています。
それ以外には何もありません。それぞれの言語の仕様は、特定の単語の意味を定義し、何かがその説明に当てはまるか、そうではありません。たとえば、C言語仕様では、Wordの「関数」の意味を非常に明確なものとして定義していますnot Wordの「関数」が通常意味するものですが、これはWordが内部で使用される方法ですCコミュニティ。
私はいくつかの情報に出くわし、それが他の答えを助けるであろうと感じました。だからそれを共有したい-
ウィキペディアは言う-
コンピュータサイエンスでは、プリミティブデータタイプは次のいずれかです:
基本タイプは、プログラミング言語によって基本構築ブロックとして提供されるデータタイプです。ほとんどの言語では、基本的なタイプから始めて、より複雑な複合タイプを再帰的に構築できます。
組み込み型は、プログラミング言語が組み込みサポートを提供するデータ型です。
ほとんどのプログラミング言語では、すべての基本的なデータ型が組み込まれています。さらに、多くの言語は、一連の複合データ型(Javaの「文字列」型)も提供しています。
このように言いたいのですが-
基本的なデータ型は、これ以上分解できないデータ型です( "string"型は "char"から作成できますが、charを任意のデータ型に分解することはできません(ほとんどのプログラミング言語)。基本的なデータ型です)
SNOBOL4の文字列型はプリミティブと見なされます。正確な理由はわかりませんが。 SNOBOL4に組み込まれているだけでなく、基本的なものでもあります。
Java仕様には、プリミティブ型と見なされるデータ型のリストが明記されています。文字列型は 仕様 にないため、組み込み型であってもJavaのプリミティブデータ型ではありません。
「プリミティブ」データタイプは、メモリに値が格納されていることを意味します。この値にはメソッドや内部構造がありません。プリミティブは、外部操作でのみ操作できます。
Javaでは、プリミティブは数値(int、longなど)とcharです。 http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html
あなたの価値が構造を持っているなら(私はここで支柱を考えています)、それは原始的ではありません。メソッド(オブジェクトまたはクラス)がある場合、プリミティブではありません。