To zależy od języka.
Na przykład w językach takich jak C i C ++, masz kilka wbudowanych typów skalarnych - int
, float
, double
, char
, itd. Są to „prymitywny” w tym sensie, że nie można rozłożyć na prostsze składniki. Z tych podstawowych typów można zdefiniować nowe typy - typy wskaźników, typy tablic, typy struktur, typy związków itp.
Potem masz taki język jak oldschoolowy Lisp, gdzie wszystko jest albo atomem, albo listą . Ponownie, zgodnie z powyższą definicją, atom jest „prymitywny” w tym sensie, że nie można go rozłożyć na coś prostszego.
Edytować
Jeśli chodzi o mnie, terminy „prymitywne”, „podstawowe” i „wbudowane” są prawie wymienne. Jeśli jednak chcesz być naprawdę pedantyczny, możesz rozróżnić typy „wbudowane” (te wyraźnie podane w definicji języka) od typów pochodnych z typów wbudowanych, które są nadal „prymitywne” lub „podstawowe” przez to, że nie można ich rozłożyć na prostsze elementy. Ctypedef
Funkcja umożliwia tworzenie nowych nazw typów dla istniejących typów. Ada pozwala tworzyć nowe typy skalarne, które mają ograniczenia. Na przykład można uzyskać typ Latitude z wbudowanego typu zmiennoprzecinkowego, z tym, że nie może on przyjmować wartości spoza zakresu [-90,0, 90,0]. Nadal jest to prymitywny lub podstawowy typ, ponieważ nie można go podzielić na prostsze komponenty, ale ponieważ jest zdefiniowany przez użytkownika, nie jest uważany za typ „wbudowany”.
Ponownie, te pojęcia są trochę niewyraźne i naprawdę zależy od kontekstu. Na przykład pojęcie typu „wbudowanego” jest bez znaczenia dla języka bez typu, takiego jak BLISS.
char
typ pierwotny iString
typ złożony.Z perspektywy Java :
W Javie istnieje bardzo wyraźne rozróżnienie między typami pierwotnymi i nieprymitywnymi.
Zmienna typu pierwotnego zawiera bezpośrednio wartość tego typu (innymi słowy, są to typy wartości ).
Zmienna typu innego niż pierwotny nie zawiera wartości bezpośrednio; zamiast tego jest to odwołanie (podobne do wskaźnika) do obiektu. (W Javie nie można tworzyć typów wartości zdefiniowanych przez użytkownika).
Java ma osiem typów prostych:
byte
,short
,int
,long
,char
,boolean
,float
idouble
. Cokolwiek innego jest nieprymitywnym typem.źródło
String
ma mieć specjalny status w języku (robi literały, to w podpisaniumain
, nie internowania, które jak mniemam jest wyraźnie dozwolone przez JLS, jest ona dostępna automagicznie itp), ale nie jest to prymitywny typ danych. Można to nazwać wbudowanym .Prymityw jest podstawowym typem danych, który nie jest zbudowany z innych typów danych. Może reprezentować tylko jedną pojedynczą wartość. Wszystkie prymitywy są wbudowanymi typami danych z konieczności (kompilator musi o nich wiedzieć), ale nie wszystkie wbudowane typy danych są prymitywami.
W niektórych językach kompilator ma wbudowaną wiedzę na temat niektórych typów, które są zbudowane z innych rzeczy, ponieważ musi być w stanie traktować je w specjalny sposób. Przykładami mogą być Wariant w Delphi i Visual Basic (i odpowiednik Boo, „Kaczka”) oraz podstawowa klasa obiektów w większości języków OO.
źródło
Ponieważ specyfikacja języka Java bardzo wyraźnie określa, co oznacza słowo „prymitywne” w kontekście Javy, a Java
String
nie jest zgodna z tą specyfikacją, podczas gdy specyfikacja języka SNOBOL4 określa, co oznacza „prymitywne” w kontekście ciągu SNOBOL4 i ciągu SNOBOL4 jest zgodny z tą specyfikacją.Naprawdę nie ma w tym nic więcej. Specyfikacja odpowiedniego języka określa, co oznaczają niektóre słowa i coś albo pasuje do tego opisu, albo nie. Na przykład specyfikacja języka C definiuje znaczenie słowa „funkcja” jako coś, co bardzo wyraźnie nie jest tym, co zwykle oznacza słowo „funkcja”, ale w ten sposób słowo to jest używane w społeczności C.
źródło
„Prymitywny” typ danych oznacza, że masz wartość zapisaną w pamięci - ta wartość nie ma metod ani wewnętrznej struktury. Operacja pierwotna może być obsługiwana tylko przez operacje zewnętrzne.
W Javie prymitywami są liczby (int, long itp.) I char. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Jeśli twoja wartość ma strukturę (mam tu na myśli rozpórki), to nie jest prymitywna. Jeśli ma metody (obiekt lub klasę), nie jest to prymityw.
źródło
int
typ danych nie mają metody ...var myString = 3.ToString();
(patrz Int32.ToString () ). Należy zauważyć, żeint
w C # jest synonimem dlaInt32
, czyliInt32
jest prymitywny typ (w przeciwieństwie do Javy, gdzieInteger
różni się odint
). Zatem3.ToString()
w języku C # nie wymaga boksowania!Natknąłem się na pewne informacje i uznałem, że to pomoże na inne odpowiedzi. Więc chcę to udostępnić -
Wikipedia mówi -
W informatyce prymitywny typ danych jest jednym z następujących:
Typ podstawowy to typ danych dostarczany przez język programowania jako podstawowy element konstrukcyjny. Większość języków pozwala na rekursywną budowę bardziej skomplikowanych typów kompozytów, zaczynając od typów podstawowych.
Wbudowany typ to typ danych, dla którego język programowania zapewnia wbudowane wsparcie.
W większości języków programowania wszystkie podstawowe typy danych są wbudowane. Ponadto wiele języków udostępnia również zestaw złożonych typów danych (typ „string” w Javie).
Chciałbym to powiedzieć w ten sposób -
podstawowy typ danych to typ danych, którego nie można dalej dzielić (typ „ciąg znaków” można utworzyć z „char”, ale char nie można „rozbić” na żaden typ danych (w większości programów języki). Więc jest to podstawowy typ danych)
Typ łańcucha w SNOBOL4 jest uważany za prymitywny. Chociaż nie znam dokładnego powodu. Jest zarówno podstawowy, jak i wbudowany w SNOBOL4.
Specyfikacja Java wyraźnie wymienia listę typów danych, które uważa za prymitywne. Ponieważ typ ciągu nie znajduje się w specyfikacji , nie jest to prymitywny typ danych w Javie, mimo że jest typem wbudowanym.
źródło
Prymitywy to podstawowe typy danych dostarczane przez sam język. Przykładami w języku C są typy danych int, float, char. Jest dostarczany jako podstawowa część języka.
Nieprymitywne to zmienne lub obiekty zdefiniowane przez użytkownika. Na przykład możesz zdefiniować obiekt przechowujący dane lub możesz użyć struct w C do zdefiniowania własnych zmiennych. Nie są one prymitywne, ponieważ trzeba je było najpierw zdefiniować, aby z nich skorzystać.
Edytuj z większą ilością wyjaśnień i odpowiedzi na komentarz. Prymitywne myślę jako zmienne, które pierwotnie pochodziły z językiem, a nie zmienne takie jak String w C ++, które musisz zadeklarować za pomocą słowa kluczowego New. To sprawia, że jest to obiekt, więc Łańcuch nie byłby prymitywny.
Odpowiedz na komentarz: Prawdopodobnie ma to związek z implementacją zmiennej. Jeśli był częścią rdzenia językowego, jest prymitywny. Jeśli nie to nie jest. Przykładem jest String w C ++. To nie jest podstawowa zmienna i jest deklarowane przy użyciu słowa kluczowego New. Więc to nie jest prymitywne.
źródło
string
jako takiego typu danych; łańcuchy są reprezentowane jako agregaty typu pierwotnegochar
. C ++ wprowadził odpowiednistring
typ danych, ale to, czy sam jest „prymitywny”, zależy od tego, kogo zapytasz. Osobiście nie sklasyfikowałbym tego jako takiego. Jednak sklasyfikowałbym oldskulowy typ ciągu BASIC jako typ prymitywny, z powodów, które są prawdopodobnie całkowicie arbitralne.Aby lepiej zrozumieć pojęcie typów pierwotnych i typy danych zdefiniowane przez użytkownika, wszystkim, czego brakuje innym odpowiedziom, jest pojęcie
compiler
.Jeśli zrozumiesz pojęcie leksemów wybieranych jako tokeny , dowiesz się, że prymitywy są jedynymi typami danych, które kompilator zna sam.
źródło