Nie sądzę, żeby były wymienne. Często są do siebie podobne, ale różnica istnieje i wydaje się, że dotyczy głównie tego, z czym są skontrastowane i co jest istotne w kontekście.
Skalary są zazwyczaj skontrastowane ze związkami , takimi jak tablice, mapy, zbiory, struktury itp. Skalar to „pojedyncza” wartość - liczba całkowita, wartość logiczna, być może ciąg znaków - podczas gdy związek składa się z wielu skalarów (i ewentualnie odwołań do inne związki). „Skalarny” jest używany w kontekstach, w których odpowiednie rozróżnienie dotyczy wartości pojedynczych / prostych / atomowych i wartości złożonych.
Typy prymitywne są jednak przeciwstawiane np. Typom referencyjnym i są używane, gdy odpowiednie rozróżnienie brzmi „Czy to jest bezpośrednio wartość, czy jest to odniesienie do czegoś, co zawiera rzeczywistą wartość?”, Tak jak w przypadku typów prymitywnych języka Java a odniesień . Widzę to jako rozróżnienie nieco niższego poziomu niż skalar / związek, ale nie do końca.
To naprawdę zależy od kontekstu (i często omawianej rodziny języków). Weźmy jeden, być może patologiczny, przykład: struny. W języku C ciąg jest złożeniem (tablicą znaków), podczas gdy w Perlu ciąg jest skalarem. W Javie ciąg jest obiektem (lub typem odniesienia). W Pythonie wszystko jest (koncepcyjnie) typem obiektowym / referencyjnym, w tym łańcuchami (i liczbami).
Istnieje wiele nieporozumień i niewłaściwego użycia tych terminów. Często jeden ma na myśli drugie. Oto, co właściwie oznaczają te terminy.
„Natywny” odnosi się do typów wbudowanych w język, w przeciwieństwie do typów dostarczanych przez bibliotekę (nawet bibliotekę standardową), niezależnie od sposobu ich implementacji. Łańcuchy Perl są częścią języka Perl, więc są natywne w Perlu. C zapewnia semantykę ciągów zamiast wskaźników do znaków przy użyciu biblioteki, więc wskaźnik do znaku jest natywny, ale łańcuchy nie.
„Atomowy” odnosi się do typu, którego nie można już rozłożyć. Jest przeciwieństwem „kompozytu” . Kompozyty można rozłożyć na kombinację wartości atomowych lub innych kompozytów. Natywne liczby całkowite i liczby zmiennoprzecinkowe są atomami. Ułamki, liczby zespolone, kontenery / kolekcje i ciągi znaków są złożone.
„Skalar” - i to jest ten, który dezorientuje większość ludzi - odnosi się do wartości, które mogą wyrażać skalę (stąd nazwa), takich jak rozmiar, objętość, liczebności itp. Liczby całkowite, liczby zmiennoprzecinkowe i ułamki są skalarami. Liczby zespolone, wartości logiczne i łańcuchy NIE są skalarami. Coś, co jest atomowe, niekoniecznie jest skalarne, a coś, co jest skalarne, niekoniecznie jest atomowe. Skalary mogą być natywne lub dostarczane przez biblioteki.
Niektóre typy mają dziwne klasyfikacje. Typy BigNumber, zwykle implementowane jako tablica cyfr lub liczb całkowitych, są skalarami, ale technicznie nie są atomowe. Mogą wydawać się niepodzielne, jeśli implementacja jest ukryta i nie możesz uzyskać dostępu do komponentów wewnętrznych. Ale komponenty są tylko ukryte, więc atomowość jest iluzją. Są prawie zawsze dostarczane w bibliotekach, więc nie są rodzime, ale mogą być. Na przykład w języku programowania Mathematica duże liczby są natywne, a ponieważ program Mathematica nie ma sposobu, aby rozłożyć je na bloki konstrukcyjne, są one również atomowe w tym kontekście, pomimo faktu, że są kompozytami pod okładki (gdzie nie jesteś już w świecie języka Mathematica).
Definicje te są niezależne od używanego języka.
źródło
Mówiąc prościej, mogłoby się wydawać, że typ „skalarny” odnosi się do pojedynczego elementu, w przeciwieństwie do złożonego lub zbioru. Tak więc skalary obejmują zarówno wartości pierwotne, jak i takie elementy, jak wartość wyliczeniowa.
http://ee.hawaii.edu/~tep/EE160/Book/chap5/section2.1.3.html
Być może termin `` skalarny '' może być powrotem do C:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0774.pdf
Ciekawi mnie, czy odnosi się to do tego, czy te elementy miałyby wartość „skali”? - Takich jak liczenie liczb.
źródło
Podoba mi się odpowiedź Scotta Langeberga, ponieważ jest zwięzła i poparta wiarygodnymi linkami. Gdybym mógł, zagłosowałbym za odpowiedzią Scotta.
Przypuszczam, że „pierwotny” typ danych można uznać za podstawowy typ danych, tak że drugorzędne typy danych pochodzą od podstawowych typów danych. Wyprowadzenie odbywa się poprzez łączenie, takie jak struktura C ++. Struct może służyć do łączenia typów danych (takich jak i int i char) w celu uzyskania dodatkowego typu danych. Typ danych zdefiniowany przez strukturę jest zawsze drugorzędnym typem danych. Podstawowe typy danych nie pochodzą od niczego, są raczej określone w języku programowania.
Mam paralelę do pierwotnego bycia nomenklaturą oznaczającą pierwotny. To podobieństwo to „wyrażenie regularne”. Myślę, że nazewnictwo „regularne” można rozumieć jako „regulujące”. W ten sposób masz wyrażenie, które reguluje wyszukiwanie.
Etymologia skalarna ( http://www.etymonline.com/index.php?allowed_in_frame=0&search=scalar&searchmode=none ) oznacza drabinkę. Myślę, że sposób, w jaki odnosi się to do programowania, polega na tym, że drabina ma tylko jeden wymiar: ile szczebli od końca drabiny. Skalarny typ danych ma tylko jeden wymiar, dlatego jest reprezentowany przez pojedynczą wartość.
Myślę, że w użyciu prymitywne i skalarne są wymienne. Czy jest jakiś przykład prymitywu, który nie jest skalarny lub skalara, który nie jest prymitywny?
Chociaż jest wymienny, element pierwotny odnosi się do typu danych będącego podstawowym blokiem konstrukcyjnym innych typów danych, a element pierwotny nie składa się z innych typów danych.
Skalar odnosi się do jednej wartości. Skalar kontrastuje z wektorem matematycznym. Wektor nie jest reprezentowany przez pojedynczą wartość, ponieważ (na przykładzie jednego rodzaju wektora) potrzebna jest jedna wartość do reprezentowania kierunku wektora, a druga do reprezentacji wielkości wektora.
Linki referencyjne: http://whatis.techtarget.com/definition/primitive http://en.wikipedia.org/wiki/Primitive_data_type
źródło
W języku C typy wyliczeniowe, znaki i różne reprezentacje liczb całkowitych tworzą bardziej ogólną klasę typów zwaną typami skalarnymi. Dlatego operacje, które można wykonać na wartościach dowolnego typu skalarnego, są takie same, jak na liczbach całkowitych.
źródło
Typ zerowy to jedyna rzecz, która najbardziej realistycznie odpowiada definicji „typu skalarnego”. Nawet serializacja „None” jako „N.” dopasowanie do 16-bitowego słowa, które jest tradycyjnie skalarne - lub nawet pojedynczy bit, który ma wiele możliwych wartości - nie jest „pojedynczą danymi”.
źródło
Każdy prymityw jest skalarny, ale nie odwrotnie. DateTime jest skalarna, ale nie prymitywna.
źródło