스칼라 대 원시 데이터 유형-같은 것입니까?


127

내가 읽은 다양한 기사에서 때때로 원시 데이터 유형에 대한 참조가 있으며 때로는 스칼라에 대한 참조가 있습니다.

각각에 대한 나의 이해는 그것들이 int, boolean, char 등과 같은 단순한 데이터 유형이라는 것입니다.

특정 용어를 사용해야한다는 의미 또는 단순히 서로 바꿔서 사용할 수있는 누락 된 부분이 있습니까? 각각의 위키 백과 페이지는 명백한 것을 보여주지 않습니다.

용어가 단순히 상호 교환 가능한 경우 어떤 것이 선호됩니까?

답변:


203

나는 그것들이 상호 교환 될 수 있다고 생각하지 않습니다. 그것들은 자주 유사하지만 차이점이 존재하며 주로 대조되는 것과 맥락에서 관련이있는 것 같습니다.

스칼라 는 일반적 으로 배열, 맵, 집합, 구조체 등과 같은 화합물 과 대조됩니다 . 스칼라는 정수, 부울, 아마도 문자열과 같은 "단일"값인 반면, 복합은 여러 스칼라로 구성됩니다. 다른 화합물). "스칼라"는 관련 구분이 단일 / 단순 / 원자 값과 복합 값 사이에있는 컨텍스트에서 사용됩니다.

그러나 원시 유형참조 유형 과 대조 되며 Java의 원시 유형 대 참조에서와 같이 관련 구별이 "이것이 직접 값입니까, 아니면 실제 값을 포함하는 것에 대한 참조입니까?"일 때 사용됩니다. . 나는 이것이 스칼라 / 복합물보다 다소 낮은 수준의 구별이라고 생각하지만 완전히는 아닙니다.

상황에 따라 다릅니다 (그리고 자주 논의되는 언어 계열). 하나의 병리학적인 예를 들면 : 문자열. C에서 문자열은 복합 (문자 배열)이고 Perl에서 문자열은 스칼라입니다. Java에서 문자열은 객체 (또는 참조 유형)입니다. 파이썬에서 모든 것은 (개념적으로) 문자열 (및 숫자)을 포함한 객체 / 참조 유형입니다.


1
또한 참조 유형 및 기본 유형에 대한 논의에서 고려할 사항은 "값"유형입니다. 스칼라와 프리미티브의 동등성에 관해서는 언어에 따라 다릅니다. 예를 들어 PHP 매뉴얼에 따르면 기본 유형의 절반 만 스칼라입니다. php.net/manual/en/language.types.intro.php
Joe Bowbeer

11
이것은 8 년 후 나를 도왔습니다. :)
CoderXYZ

18

이 용어에 대한 많은 혼란과 오용이 있습니다. 종종 하나는 다른 의미로 사용됩니다. 이 용어가 실제로 의미하는 바는 다음과 같습니다.

"네이티브" 는 구현 방법에 관계없이 라이브러리 (표준 라이브러리 포함)에서 제공하는 것과 반대로 언어에 내장 된 유형을 나타냅니다. Perl 문자열은 Perl 언어의 일부이므로 Perl에서 기본입니다. C는 라이브러리를 사용하여 char에 대한 포인터에 대한 문자열 의미를 제공하므로 char에 대한 포인터는 기본이지만 문자열은 그렇지 않습니다.

"원자" 는 더 이상 분해 할 수없는 유형을 나타냅니다. "composite" 의 반대입니다 . 합성물은 원자 값 또는 다른 합성물의 조합으로 분해 될 수 있습니다. 기본 정수와 부동 소수점 숫자는 원자 적입니다. 분수, 복소수, 컨테이너 / 컬렉션 및 문자열은 복합입니다.

"Scalar"( 대부분의 사람들을 혼란스럽게하는 것입니다)는 크기, 부피, 개수 등과 같은 스케일 (따라서 이름)을 표현할 수있는 값을 나타냅니다. 정수, 부동 소수점 숫자 및 분수는 스칼라입니다. 복소수, 부울 및 문자열은 스칼라 가 아닙니다 . 원자적인 것이 반드시 스칼라 일 필요는없고 스칼라 인 것이 반드시 원자 적이지는 않습니다. 스칼라는 네이티브이거나 라이브러리에서 제공 할 수 있습니다.

일부 유형에는 이상한 분류가 있습니다. 일반적으로 숫자 또는 정수의 배열로 구현되는 BigNumber 유형은 스칼라이지만 기술적으로 원 자성이 아닙니다. 구현이 숨겨져 있고 내부 구성 요소에 액세스 할 수없는 경우 원자 적으로 표시 될 수 있습니다. 그러나 구성 요소는 숨겨져 있으므로 원자 성은 환상입니다. 거의 항상 라이브러리에서 제공되므로 네이티브는 아니지만 가능할 수 있습니다. 예를 들어 Mathematica 프로그래밍 언어에서 큰 숫자는 네이티브이고 Mathematica 프로그램이이를 빌딩 블록으로 분해 할 수있는 방법이 없기 때문에 해당 컨텍스트에서 원자 적입니다. 커버 (더 이상 Mathematica 언어의 세계에 있지 않은 곳).

이러한 정의는 사용되는 언어와 무관합니다.


16
이 스칼라 유형의 정의가 나에게 가장 의미가 있지만 가장 일반적으로 받아 들여지는 유형은 아닌 것 같습니다.
lleaff

1
'Scalar'에 대한 명확한 정의에 감사드립니다. @lleaff가 지적했듯이 대부분의 사람들은 이러한 특정 의미에서 사용하지 않지만 사용하면 더 좋을 것입니다.
clockworkpc

뛰어난 언어 적 정의. 이 답변은보다 완전한 토론을 위해 Michael Ekstrand의 답변과 함께 읽어야합니다. 프로그래밍 언어의 맥락에서 스칼라는 불행히도 다른 의미를 갖습니다.
Jerry

9

간단히 말해서 '스칼라'유형은 복합 또는 컬렉션이 아닌 단일 항목을 참조하는 것처럼 보입니다. 따라서 스칼라에는 원시 값과 열거 형 값이 모두 포함됩니다.

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

이 항목이 '스케일'의 값을 가질 지 여부를 나타내는 지 궁금합니다. -숫자 세기 등.


2
나는 (아주 오래 전 학교에서)이 용어가 '벡터 프로세서'와는 대조적으로 '스칼라 프로세서'에서 파생되었다고 배웠습니다. 스칼라 프로세서는 한 번에 하나의 데이터 만 처리 할 수있는 CPU입니다. 이러한 프로세서는 산술 용어의 이름을 따서 명명되었습니다. 흥미롭게도 위키피디아에서 '스칼라'를 검색하면 '변수'로 리디렉션됩니다.
Evert 2016 년

2

간결하고 권위있는 링크로 뒷받침되기 때문에 Scott Langeberg의 답변을 좋아합니다. 가능하다면 Scott의 답변에 찬성 투표를했습니다.

2 차 데이터 유형이 기본 데이터 유형에서 파생되도록 "기본"데이터 유형이 기본 데이터 유형으로 간주 될 수 있다고 가정합니다. 파생은 C ++ 구조체와 같은 결합을 통해 이루어집니다. 구조체를 사용하여 데이터 유형 (예 : and int 및 char)을 결합하여 보조 데이터 유형을 가져올 수 있습니다. 구조체 정의 데이터 유형은 항상 보조 데이터 유형입니다. 기본 데이터 유형은 어떤 것에서 파생 된 것이 아니라 프로그래밍 언어로 제공됩니다.

나는 기본을 의미하는 명명법 인 원시와 유사합니다. 그 평행은 "정규식"입니다. 명명법 "일반"은 "규제"로 이해 될 수 있다고 생각합니다. 따라서 검색을 규제하는 표현이 있습니다.

스칼라 어원 ( http://www.etymonline.com/index.php?allowed_in_frame=0&search=scalar&searchmode=none )은 사다리 형을 의미합니다. 이것이 프로그래밍과 관련된 방식은 사다리가 단 하나의 차원을 가지고 있다는 것입니다. 사다리 끝에서 몇 개의 가로대가 있는지. 스칼라 데이터 유형에는 차원이 하나만 있으므로 단일 값으로 표시됩니다.

사용상 프리미티브와 스칼라는 상호 교환이 가능하다고 생각합니다. 스칼라가 아닌 프리미티브 또는 프리미티브가 아닌 스칼라의 예가 있습니까?

상호 교환이 가능하지만 프리미티브는 데이터 유형이 다른 데이터 유형의 기본 빌딩 블록이며 프리미티브는 다른 데이터 유형으로 구성되지 않음을 나타냅니다.

스칼라는 단일 값을 갖는 것을 나타냅니다. 스칼라는 수학적 벡터와 대조됩니다. 벡터는 하나의 값으로 표현되지 않습니다. (예를 들어 한 종류의 벡터 사용) 벡터의 방향을 나타내는 데 하나의 값이 필요하고 벡터의 크기를 나타내는 데 다른 값이 필요하기 때문입니다.

참조 링크 : http://whatis.techtarget.com/definition/primitive http://en.wikipedia.org/wiki/Primitive_data_type


0

C에서 열거 유형, 문자 및 다양한 정수 표현은 스칼라 유형이라는보다 일반적인 유형 클래스를 형성합니다. 따라서 모든 스칼라 유형의 값에 대해 수행 할 수있는 작업은 정수에 대한 작업과 동일합니다.


0

null 유형은 "스칼라 유형"의 정의를 가장 현실적으로 준수하는 유일한 것입니다. 'None'을 'N'으로 연재하기도합니다. 전통적으로 스칼라 인 16 비트 워드 또는 여러 가능한 값을 가진 단일 비트에 맞추는 것은 "단일 데이터"가 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.