web-dev-qa-db-ja.com

スカラーとプリミティブデータタイプ-それらは同じものですか?

私が読んださまざまな記事で、プリミティブデータ型への参照がある場合と、スカラーへの参照がある場合があります。

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

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

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

105
Ben Pearson

互換性があるとは思いません。それらはしばしば類似していますが、違いは存在し、主にそれらが対比されるものと文脈において関連するものにあるようです。

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

Primitive typesただし、たとえば参照型。Javaのプリミティブ型と参照のように、関連する区別が「これは直接値なのか、実際の値を含むものへの参照なのか」という場合に使用されます。私はこれをスカラー/化合物よりもやや低レベルの区別として見ていますが、完全ではありません。

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

164

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

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

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

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

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

これらの定義は、使用されている言語に依存しません。

13
Claudio Puviani

簡単に言えば、コンポジットまたはコレクションではなく、「スカラー」タイプが単一のアイテムを指しているように見えます。そのため、スカラーにはプリミティブ値と列挙値などが含まれます。

http://ee.hawaii.edu/~tep/EE160/Book/chap5/section2.1.3.html

おそらく、「スカラー」という用語はCへの先祖返りかもしれません。

スカラーは、単一の値を含み、他のC++オブジェクトで構成されていないプリミティブオブジェクトです。

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0774.pdf

これは、これらの項目が「スケール」の値を持っているかどうかを指しているのかどうか興味がありますか? -数を数えるなど。

9
Scott Langeberg

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

「プライマリ」データ型はプライマリデータ型と見なされ、セカンダリデータ型はプライマリデータ型から派生するものと考えられます。派生は、C++構造体などの結合によるものです。構造体を使用して、データ型(and、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/primitivehttp://en.wikipedia.org/wiki/Primitive_data_type

3
Indinfer

Cでは、列挙型、文字、および整数のさまざまな表現が、スカラー型と呼ばれるより一般的な型クラスを形成します。したがって、任意のスカラー型の値に対して実行できる操作は、整数の操作と同じです。

0
Onkell Wang

null型は、「スカラー型」の定義に最も現実的に適合する唯一のものです。 「None」を「N」としてシリアル化した場合でも伝統的にスカラーである16ビットWordに適合するか、または複数の可能な値を持つ単一ビットでさえも、「単一データ」ではありません。

0
Commenter