Cosa si intende per tipo di dati primitivi?

39

La mia comprensione di un tipo di dati primitivo è che

It is a datatype provided by a language implicitly (Others are user defined classes)

Quindi lingue diverse hanno serie diverse di tipi di dati considerati primitivi per quella particolare lingua. È giusto?

E qual è la differenza tra un "tipo di dati di base" e un "tipo di dati incorporato". Wikipedia dice che un tipo di dati primitivo è uno dei due.

PS - Perché il tipo "stringa" è considerato come un tipo primitivo in SNOBOL4 e non in Java?

    
posta jsp99 14.03.2012 - 15:52
fonte

8 risposte

32

Dipende dalla lingua.

Ad esempio, in linguaggi come C e C ++, hai un numero di tipi scalari incorporati - int , float , double , char , ecc. Questi sono "primitivi" nel senso che non possono essere scomposti in componenti più semplici. Da questi tipi di base puoi definire nuovi tipi: tipi di puntatori, tipi di array, tipi di struttura, tipi di unione, ecc.

Allora hai una lingua come Lisp vecchia scuola, dove tutto è un atomo o un elenco . Di nuovo, secondo la definizione di cui sopra, un atomo è "primitivo" nel senso che non può essere scomposto in qualcosa di più semplice.

Modifica

Per quanto mi riguarda, i termini "primitivo", "base" e "built-in" sono praticamente intercambiabili. Se si vuole ottenere un pedante veramente , tuttavia, è possibile distinguere tra tipi "built-in" (quelli forniti esplicitamente dalla definizione del linguaggio) e tipi derivati dai tipi built-in che sono ancora "primitivo" o "base" in quanto non possono essere scomposti in elementi più semplici. La funzione typedef di C consente di creare nuovi nomi di tipi per tipi esistenti. Ada ti consente di creare nuovi tipi di scalari con vincoli su di essi. Ad esempio, è possibile derivare un tipo Latitude dal tipo floating incorporato, con il vincolo che non può assumere valori al di fuori dell'intervallo [-90.0, 90.0]. È ancora un tipo primitivo o di base in quanto non può essere scomposto in componenti più semplici, ma dal momento che è definito dall'utente, non è considerato un tipo "incorporato".

Ancora una volta, questi concetti sono un po 'confusi e dipendono davvero dal contesto. Ad esempio, la nozione di un tipo "built-in" è priva di significato per un linguaggio senza caratteri come BLISS.

    
risposta data 14.03.2012 - 16:11
fonte
18

Dalla prospettiva Java :

In Java, c'è una distinzione molto chiara tra tipi primitivi e non primitivi.

Una variabile di un tipo primitivo contiene direttamente il valore di quel tipo (in altre parole, sono tipi di valori ).

Una variabile di un tipo non primitivo non contiene direttamente il valore; invece, è un riferimento (simile a un puntatore) a un oggetto. (Non è possibile in Java creare tipi di valori definiti dall'utente).

Java ha otto tipi primitivi: byte , short , int , long , char , boolean , float e double . Qualsiasi altra cosa è un tipo non primitivo.

    
risposta data 14.03.2012 - 16:39
fonte
8

Una primitiva è un tipo di dati di base che non è costruito da altri tipi di dati. Può rappresentare solo un singolo valore. Tutti i primitivi sono tipi di dati incorporati per necessità, (il compilatore deve conoscerli), ma non tutti i tipi di dati incorporati sono primitivi.

In alcune lingue, il compilatore ha una conoscenza incorporata di certi tipi che sono costruiti da altre cose, perché deve essere in grado di trattarli in un modo speciale. Gli esempi potrebbero essere Variant in Delphi e Visual Basic (e l'equivalente Boo, "Duck") e la classe dell'oggetto base nella maggior parte dei linguaggi OO.

    
risposta data 14.03.2012 - 16:11
fonte
5

Why is "string" type considered as a primitive type in SNOBOL4 and not in Java ?

Poiché la specifica del linguaggio Java specifica in modo molto chiaro cosa significhi la parola "primitivo" nel contesto di Java e la String di Java non è conforme a questa specifica, mentre la specifica del linguaggio SNOBOL4 definisce cosa significa "primitivo" nel il contesto di SNOBOL4 e la stringa di SNOBOL4 sono conformi a tale specifica.

Non c'è davvero niente di più. Le specifiche del rispettivo linguaggio definiscono cosa significano certe parole e qualcosa o si adatta a quella descrizione oppure no. Ad esempio, la Specifica del linguaggio C definisce il significato della parola "funzione" come qualcosa che è molto chiaramente non che cosa la parola "funzione" di solito significa, ma questo è il modo in cui la parola viene usata all'interno del C community.

    
risposta data 16.03.2012 - 03:04
fonte
0

Un tipo di dati "primitivo" significa che hai un valore memorizzato in memoria - questo valore non ha metodi o struttura interna. Una primitiva può essere gestita solo da operazioni esterne.

In Java, le primitive sono numeri (int, long, ecc.) e char. link

Se il tuo valore ha una struttura (sto pensando ai montanti qui), allora non è un primitivo. Se ha metodi (un oggetto o una classe) non è un primitivo.

    
risposta data 14.03.2012 - 16:08
fonte
0

Mi sono imbattuto in alcune informazioni e ho sentito che avrebbe aiutato le altre risposte. Quindi vuoi condividerlo -

Wikipedia dice -

In informatica, il tipo di dati primitivi è uno dei seguenti:

Un tipo base è un tipo di dati fornito da un linguaggio di programmazione come base elementare. La maggior parte dei linguaggi consente di creare ricorsivamente tipi di compositi più complicati a partire da tipi di base.
Un tipo predefinito è un tipo di dati per il quale il linguaggio di programmazione fornisce supporto integrato.

Nella maggior parte dei linguaggi di programmazione, tutti i tipi di dati di base sono integrati. Inoltre, molte lingue forniscono anche un set di tipi di dati compositi (tipo "stringa" in Java).

Vorrei dirlo in questo modo -
Un tipo di dati di base è un tipo di dati che non può essere ulteriormente scomposto (il tipo "stringa" può essere creato da "char", ma il carattere non può essere "scomposto" in alcun tipo di dati (nella maggior parte dei linguaggi di programmazione).

Tipo di stringa, in SNOBOL4 è considerato primitivo. Anche se non conosco il motivo esatto per cui. È sia di base sia integrato in SNOBOL4.

Le specifiche Java menzionano chiaramente l'elenco di tipi di dati che considera essere di tipo primitivo. Poiché il tipo di stringa non è nella specifica , non è un tipo di dati primitivo in Java, nonostante di essere un tipo predefinito.

    
risposta data 16.03.2012 - 14:53
fonte
-2

I primitivi sono tipi di dati fondamentali forniti dalla lingua stessa. Esempio in linguaggio C sono i tipi di dati int, float, char. Viene fornito come parte fondamentale della lingua.

Le non primitive sono variabili o oggetti definiti dall'utente. Ad esempio è possibile definire un oggetto che memorizza i dati oppure è possibile utilizzare struct in C per definire le proprie variabili. Questi non sono primitivi perché dovevi prima definirli per usarli.

Examples: Employee, Student, a_very_large_number_that_you_defined_yourself

Modifica con ulteriori spiegazioni e risposta al commento Penso alle primitive come variabili originariamente originate dal linguaggio e non variabili come String in C ++ che devi dichiarare usando la nuova parola chiave. Questo lo rende un oggetto quindi una stringa non sarebbe una primitiva.

Rispondi al tuo commento: Probabilmente ha a che fare con l'implementazione della variabile. Se faceva parte del nucleo linguistico, è primitivo. Se no, non lo è. L'esempio è una stringa in C ++. Questa non è una variabile principale e viene dichiarata usando la nuova parola chiave. Quindi non è primitivo.

    
risposta data 14.03.2012 - 16:03
fonte
-2

Per una migliore comprensione del concetto di tipi primitivi e di tipi di dati definiti dall'utente tutto ciò che manca alle altre risposte è il concetto di compiler .

Se comprendi il concetto di ixemes viene selezionato come token , verrai a sapere che i primitivi sono gli unici tipi di dati che un compilatore conosce da solo.

    
risposta data 09.04.2012 - 22:10
fonte

Leggi altre domande sui tag