Itu agak tergantung pada bahasa.
Misalnya, dalam bahasa seperti C dan C ++, Anda memiliki sejumlah built-in jenis skalar - int
, float
, double
, char
, dll Ini adalah "primitif" dalam arti bahwa mereka tidak bisa diurai menjadi komponen yang lebih sederhana. Dari tipe dasar ini Anda dapat menentukan tipe baru - tipe pointer, tipe array, tipe struct, tipe union, dll.
Kemudian Anda memiliki bahasa seperti Lisp sekolah tua, di mana semuanya adalah atom atau daftar . Sekali lagi, dengan definisi di atas, atom adalah "primitif" dalam arti bahwa ia tidak dapat diuraikan menjadi sesuatu yang lebih sederhana.
Edit
Sejauh yang saya ketahui, istilah "primitif", "dasar", dan "bawaan" cukup dapat dipertukarkan. Namun, jika Anda benar-benar ingin bertele - tele, Anda dapat membedakan antara tipe yang "built-in" (yang secara eksplisit disediakan oleh definisi bahasa) dan tipe yang berasal dari tipe built-in yang masih "primitif" atau "dasar" karena mereka tidak dapat diuraikan menjadi elemen yang lebih sederhana. C'stypedef
fasilitas memungkinkan Anda untuk membuat nama tipe baru untuk tipe yang sudah ada. Ada memungkinkan Anda untuk membuat jenis skalar baru yang memiliki kendala pada mereka. Misalnya, Anda bisa mendapatkan tipe Latitude dari tipe mengambang bawaan, dengan batasan yang tidak bisa mengambil nilai di luar rentang [-90.0, 90.0]. Ini masih tipe primitif atau dasar karena tidak dapat dipecah menjadi komponen yang lebih sederhana, tetapi karena itu didefinisikan pengguna, itu tidak dianggap sebagai tipe "built-in".
Sekali lagi, konsep-konsep ini sedikit kabur, dan itu benar-benar tergantung pada konteksnya. Misalnya, gagasan tipe "built-in" tidak ada artinya untuk bahasa tanpa jenis seperti BLISS.
char
tipe primitif danString
tipe gabungan.Dari perspektif Jawa :
Di Jawa, ada perbedaan yang sangat jelas antara tipe primitif dan non-primitif.
Variabel tipe primitif secara langsung berisi nilai tipe itu (dengan kata lain, mereka adalah tipe nilai ).
Variabel tipe non-primitif tidak mengandung nilai secara langsung; alih-alih, ini adalah referensi (mirip dengan pointer) ke objek. (Tidak mungkin di Jawa untuk membuat tipe nilai yang ditentukan pengguna).
Java memiliki delapan tipe primitif:
byte
,short
,int
,long
,char
,boolean
,float
dandouble
. Yang lainnya adalah tipe non-primitif.sumber
String
memang memiliki status khusus dalam bahasa (itu mendapat literal, itu dalam tanda tanganmain
, ada interning yang saya anggap diizinkan secara eksplisit oleh JLS, itu tersedia secara otomatis, dll.) Tetapi itu bukan tipe data primitif . Orang mungkin menyebutnya built-in .Primitif adalah tipe data dasar yang tidak dibangun dari tipe data lainnya. Itu hanya dapat mewakili satu nilai tunggal. Semua primitif adalah tipe data bawaan karena kebutuhan, (kompilator harus mengetahuinya), tetapi tidak semua tipe data bawaan merupakan primitif.
Dalam beberapa bahasa, kompiler memiliki pengetahuan bawaan tentang jenis-jenis tertentu yang dibangun dari hal-hal lain, karena ia harus dapat memperlakukan mereka dengan cara yang khusus. Contohnya adalah Varian dalam Delphi dan Visual Basic (dan setara Boo, "Duck") dan kelas objek dasar dalam sebagian besar bahasa OO.
sumber
Karena Spesifikasi Bahasa Jawa dengan sangat jelas menentukan apa arti kata "primitif" dalam konteks Jawa, dan Java
String
tidak sesuai dengan spesifikasi ini, sedangkan Spesifikasi Bahasa SNOBOL4 mendefinisikan apa arti "primitif" dalam konteks string SNOBOL4 dan SNOBOL4 sesuai dengan spesifikasi itu.Tidak ada yang lebih dari itu. Spesifikasi bahasa masing-masing mendefinisikan arti kata-kata tertentu dan sesuatu yang cocok dengan deskripsi itu atau tidak. Sebagai contoh, Spesifikasi Bahasa C mendefinisikan arti kata "fungsi" menjadi sesuatu yang sangat jelas bukan arti kata "fungsi", tetapi itulah cara kata tersebut digunakan di dalam komunitas C.
sumber
Tipe data 'primitif' berarti bahwa Anda memiliki nilai yang tersimpan di memori - nilai ini tidak memiliki metode atau struktur internal. Primitif hanya dapat dioperasikan oleh operasi eksternal.
Di Jawa, primitif adalah angka (int, panjang, dll.) Dan char. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Jika nilai Anda memiliki struktur (saya memikirkan struts di sini) maka itu bukan primitif. Jika memiliki metode (objek atau kelas) itu bukan primitif.
sumber
int
Tipe data primitif C # memang memiliki metode ...var myString = 3.ToString();
(lihat Int32.ToString () ). Perhatikan bahwaint
dalam C # adalah sinonim untukInt32
, yaitu,Int32
adalah tipe primitif (tidak seperti Java, di manaInteger
berbeda dariint
). Jadi,3.ToString()
di C # tidak melibatkan tinju!Saya menemukan beberapa informasi dan merasa itu akan membantu jawaban yang lain. Jadi ingin membagikannya -
Wikipedia mengatakan -
Dalam ilmu komputer, tipe data primitif adalah salah satu dari yang berikut:
Tipe dasar adalah tipe data yang disediakan oleh bahasa pemrograman sebagai blok penyusun dasar. Sebagian besar bahasa memungkinkan tipe komposit yang lebih rumit untuk dibangun secara rekursif mulai dari tipe dasar.
Tipe bawaan adalah tipe data yang bahasa pemrogramannya menyediakan dukungan bawaan.
Di sebagian besar bahasa pemrograman, semua tipe data dasar adalah bawaan. Selain itu, banyak bahasa juga menyediakan satu set tipe data komposit (tipe "string" di Jawa).
Saya ingin mengatakannya seperti ini -
Tipe data dasar adalah tipe data yang tidak dapat dirinci lebih lanjut (tipe "string" dapat dibuat dari "char", tetapi char tidak dapat 'dipecah' menjadi tipe data apa pun (Dalam sebagian besar Pemrograman bahasa) .Jadi ini adalah tipe data dasar)
Jenis string, di SNOBOL4 dianggap primitif. Meskipun saya tidak tahu alasan pasti mengapa. Baik dasar maupun bawaan di SNOBOL4.
Spesifikasi Java dengan jelas menyebutkan daftar tipe data yang dianggapnya tipe primitif. Karena tipe string tidak dalam spesifikasi mereka , itu bukan tipe data primitif di Jawa, meskipun menjadi tipe bawaan.
sumber
Primitif adalah tipe data mendasar yang disediakan oleh bahasa itu sendiri. Contoh dalam bahasa C adalah tipe data int, float, char. Ini disediakan sebagai bagian mendasar dari bahasa.
Non primitif adalah variabel atau objek yang ditentukan pengguna. Misalnya Anda bisa mendefinisikan objek yang menyimpan data atau Anda bisa menggunakan struct di C untuk mendefinisikan variabel Anda sendiri. Ini bukan primitif karena Anda harus mendefinisikannya terlebih dahulu untuk menggunakannya.
Sunting dengan lebih banyak penjelasan dan menanggapi komentar yang saya anggap primitif sebagai variabel yang awalnya berasal dari bahasa dan bukan variabel seperti String di C ++ yang harus Anda deklarasikan menggunakan kata kunci baru. Itu menjadikannya objek sehingga String tidak akan menjadi primitif.
Jawab komentar Anda: Ini mungkin ada hubungannya dengan implementasi variabel. Jika itu adalah bagian dari inti bahasa, itu adalah primitif. Jika tidak, tidak. Contohnya adalah String dalam C ++. Ini bukan variabel inti dan dinyatakan menggunakan kata kunci baru. Jadi itu tidak primitif.
sumber
string
tipe data seperti itu; string direpresentasikan sebagai agregat dari tipe primitifchar
. C ++ memperkenalkanstring
tipe data yang tepat , tetapi apakah itu tipe "primitif" itu sendiri tergantung pada siapa Anda bertanya. Secara pribadi, saya tidak akan mengklasifikasikannya. Namun, saya akan mengklasifikasikan tipe string BASIC old-school sebagai tipe primitif, untuk alasan yang mungkin sepenuhnya arbitrer.Untuk lebih memahami konsep tipe primitif dan tipe data yang ditentukan pengguna, semua yang tidak ada jawaban lainnya adalah konsep
compiler
.Jika Anda memahami konsep leksem yang dipilih sebagai token , Anda akan mengetahui bahwa primitif adalah satu-satunya tipe data yang diketahui oleh kompiler dengan sendirinya.
sumber