161

私が読んださまざまな記事では、プリミティブ データ型への言及があったり、スカラーへの言及があったりします。

それぞれの私の理解は、それらがint、boolean、charなどのような単純なもののデータ型であるということです.

特定の用語を使用する必要があること、または用語が単に交換可能であることを意味する、私が見逃しているものはありますか? それぞれのウィキペディアのページには、明らかなことは何も示されていません。

用語が単に交換可能である場合、どちらが優先されますか?

4

8 に答える 8

252

それらは交換可能ではないと思います。それらはしばしば類似していますが、違いは存在し、主にそれらが対比されているものと文脈に関連しているものにあるようです.

スカラーは通常、配列、マップ、セット、構造体などの複合と対比されます。スカラーは「単一の」値 (整数、ブール値、おそらく文字列) ですが、複合は複数のスカラー (および場合によってはへの参照) で構成されます。他の化合物)。「スカラー」は、関連する区別が単一/単純/原子値と複合値の間であるコンテキストで使用されます。

ただし、プリミティブ型は参照型などとは対照的であり、Java のプリミティブ型と参照のように、関連する区別が「これは直接値か、それとも実際の値を含む何かへの参照か」である場合に使用されます。 . これは、スカラー/複合よりもやや低レベルの違いだと思いますが、完全ではありません。

それは本当に文脈に依存します(そして、どの言語ファミリーが議論されているか)。おそらく病的な例を挙げると、文字列です。C では文字列は複合 (文字の配列) ですが、Perl では文字列はスカラーです。Java では、文字列はオブジェクト (または参照型) です。Python では、文字列 (および数値) を含むすべてが (概念的に) オブジェクト/参照型です。

于 2011-07-08T18:10:28.007 に答える
29

これらの用語には多くの混乱と誤用があります。多くの場合、一方は他方を意味するために使用されます。これらの用語の実際の意味は次のとおりです。

「ネイティブ」とは、実装方法に関係なく、ライブラリ (標準ライブラリであっても) によって提供されるのではなく、言語に組み込まれている型を指します。Perl 文字列は Perl 言語の一部であるため、Perl でネイティブです。C は、ライブラリを使用して char へのポインターに対する文字列セマンティクスを提供するため、char へのポインターはネイティブですが、文字列はネイティブではありません。

「アトミック」とは、もはや分解できない型を指します。「複合」の反対です。コンポジットは、原子値または他のコンポジットの組み合わせに分解できます。ネイティブの整数と浮動小数点数はアトミックです。分数、複素数、コンテナー/コレクション、および文字列は複合です。

「スカラー」 -これはほとんどの人を混乱させるものです-サイズ、ボリューム、カウントなど、スケールを表すことができる値 (したがって名前) を指します。整数、浮動小数点数、および分数はスカラーです。複素数、ブール値、および文字列はスカラーではありません。アトミックなものは必ずしもスカラーではなく、スカラーのものは必ずしもアトミックではありません。スカラーは、ネイティブにすることも、ライブラリによって提供することもできます。

一部のタイプには、奇妙な分類があります。通常は数字または整数の配列として実装される BigNumber 型はスカラーですが、技術的にはアトミックではありません。実装が隠され、内部コンポーネントにアクセスできない場合、それらはアトミックに見えることがあります。しかし、コンポーネントは隠されているだけなので、原子性は幻想です。それらはほぼ常にライブラリで提供されているため、ネイティブではありませんが、そうである可能性があります。たとえば、Mathematica プログラミング言語では、大きな数はネイティブであり、Mathematica プログラムがそれらを構築ブロックに分解する方法がないため、そのコンテキストでは原子的でもあります。カバーします(Mathematica 言語の世界にはもういません)。

これらの定義は、使用されている言語とは無関係です。

于 2016-05-29T01:44:45.753 に答える
4

Scott Langeberg の回答は、簡潔で信頼できるリンクに裏付けられているため、気に入っています。できれば、スコットの答えに賛成票を投じます。

「プリミティブ」データ型をプライマリ データ型と見なして、セカンダリ データ型をプライマリ データ型から派生させることができると思います。派生は、C++ 構造体などの結合によって行われます。構造体を使用して、データ型 (および int と char など) を組み合わせて、セカンダリ データ型を取得できます。構造体定義のデータ型は、常にセカンダリ データ型です。一次データ型は何かから派生したものではなく、プログラミング言語で与えられたものです。

私は、基本的な意味の命名法である原始的なものに類似しています。その対比が「正規表現」です。「レギュラー」という命名法は「規制する」と理解できると思います。したがって、検索を規制する式があります。

スカラーの語源 ( http://www.etymonline.com/index.php?allowed_in_frame=0&search=scalar&searchmode=none ) は、はしごのようなものを意味します。これがプログラミングに関連する方法は、はしごには 1 つの次元しかないということだと思います。スカラー データ型には次元が 1 つしかないため、単一の値で表されます。

使用法では、プリミティブとスカラーは交換可能だと思います。スカラーではないプリミティブ、またはプリミティブではないスカラーの例はありますか?

交換可能ですが、プリミティブはデータ型が他のデータ型の基本的な構成要素であることを指し、プリミティブは他のデータ型で構成されていません。

スカラーとは、単一の値を持つことを指します。スカラーは、数学的なベクトルとは対照的です。ベクトルは単一の値で表されるわけではありません。これは、ベクトルの方向を表すには 1 つの値が必要であり、ベクトルの大きさを表すには別の値が必要なためです (例として 1 種類のベクトルを使用)。

参照リンク: http://whatis.techtarget.com/definition/primitive http://en.wikipedia.org/wiki/Primitive_data_type

于 2015-04-15T13:48:11.340 に答える
0

すべてのプリミティブはスカラーですが、その逆ではありません。DateTime はスカラーですが、プリミティブではありません。

于 2020-08-07T16:24:08.867 に答える