O que significa um tipo de dados primitivo?

39

Meu entendimento de um tipo de dados primitivo é que

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

Tão diferentes linguagens têm diferentes conjuntos de tipos de dados que são considerados primitivos para esse idioma em particular. Está certo?

E qual é a diferença entre um "tipo de dados básico" e "tipo de dados interno". A Wikipedia diz que um tipo de dado primitivo é um dos dois.

PS: Por que o tipo "string" é considerado um tipo primitivo no SNOBOL4 e não em Java?

    
por jsp99 14.03.2012 / 15:52
fonte

8 respostas

32

Depende da linguagem.

Por exemplo, em linguagens como C e C ++, você tem vários tipos escalares internos - int , float , double , char , etc. Eles são "primitivos" no sentido que eles não podem ser decompostos em componentes mais simples. A partir desses tipos básicos, você pode definir novos tipos - tipos de ponteiro, tipos de matriz, tipos de estrutura, tipos de união, etc.

Então você tem uma linguagem como a antiga Lisp, onde tudo é um átomo ou uma lista . Novamente, pela definição acima, um átomo é "primitivo" no sentido de que não pode ser decomposto em algo mais simples.

Editar

Tanto quanto eu estou preocupado, os termos "primitivo", "básico" e "embutido" são praticamente intercambiáveis. Se você quiser realmente pedante, é possível distinguir entre os tipos "internos" (aqueles explicitamente fornecidos pela definição da linguagem) e os tipos derivados dos tipos internos que ainda são "primitivo" ou "básico", pois não podem ser decompostos em elementos mais simples. O recurso typedef do C permite criar novos nomes de tipos para tipos existentes. Ada permite que você crie novos tipos escalares que tenham restrições sobre eles. Por exemplo, você pode derivar um tipo de Latitude a partir do tipo flutuante integrado, com a restrição de não aceitar valores fora do intervalo [-90.0, 90.0]. Ainda é um tipo básico ou primitivo, pois não pode ser dividido em nenhum componente mais simples, mas como é definido pelo usuário, não é considerado um tipo "interno".

Mais uma vez, esses conceitos são um pouco confusos e realmente dependem do contexto. Por exemplo, a noção de um tipo "embutido" não tem sentido para uma linguagem sem tipo, como BLISS.

    
por 14.03.2012 / 16:11
fonte
18

Da perspectiva Java :

Em Java, há uma distinção muito clara entre tipos primitivos e não-primitivos.

Uma variável de um tipo primitivo contém diretamente o valor desse tipo (em outras palavras, eles são tipos de valor ).

Uma variável de um tipo não primitivo não contém o valor diretamente; em vez disso, é uma referência (semelhante a um ponteiro) para um objeto. (Não é possível em Java criar tipos de valor definidos pelo usuário).

O Java tem oito tipos primitivos: byte , short , int , long , char , boolean , float e double . Qualquer outra coisa é um tipo não primitivo.

    
por 14.03.2012 / 16:39
fonte
8

Uma primitiva é um tipo de dados básico que não é construído a partir de outros tipos de dados. Só pode representar um único valor. Todas as primitivas são tipos de dados embutidos por necessidade, (o compilador tem que saber sobre eles), mas nem todos os tipos de dados internos são primitivos.

Em algumas linguagens, o compilador possui conhecimento embutido de certos tipos que são construídos a partir de outras coisas, porque ele deve ser capaz de tratá-los de uma maneira especial. Exemplos seriam a Variant em Delphi e Visual Basic (e o equivalente Boo, "Duck") e a classe de objeto base na maioria das linguagens OO.

    
por 14.03.2012 / 16:11
fonte
5

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

Como a Especificação de Linguagem Java especifica muito claramente o que a palavra "primitiva" significa no contexto de Java, e o String do Java não está em conformidade com essa especificação, enquanto a Especificação de Linguagem SNOBOL4 define o que "primitiva" significa no O contexto da seqüência SNOBOL4 e SNOBOL4 está de acordo com essa especificação.

Não há mais nada para isso. A especificação da respectiva linguagem define o que certas palavras significam e algo se encaixa nessa descrição ou não. Por exemplo, a Especificação da Linguagem C define o significado da palavra "função" como algo que é claramente não o que a palavra "função" normalmente significa, mas é assim que a palavra é usada dentro da Comunidade C.

    
por 16.03.2012 / 03:04
fonte
0

Um tipo de dados 'primitivo' significa que você tem um valor armazenado na memória - este valor não possui métodos ou estrutura interna. Uma primitiva só pode ser operada por operações externas.

Em Java, os primitivos são números (int, long, etc.) e char. link

Se seu valor tem estrutura (estou pensando em struts aqui), então não é primitivo. Se tem métodos (um objeto ou classe) não é primitivo.

    
por 14.03.2012 / 16:08
fonte
0

Me deparei com algumas informações e senti que ajudaria as outras respostas. Então, quer compartilhar isso -

Wikipedia diz -

Na ciência da computação, o tipo de dados primitivos é um dos seguintes:

Um tipo básico é um tipo de dados fornecido por uma linguagem de programação como um bloco de construção básico. A maioria das linguagens permite que tipos compostos mais complexos sejam recursivamente construídos a partir de tipos básicos.
Um tipo integrado é um tipo de dados para o qual a linguagem de programação fornece suporte embutido.

Na maioria das linguagens de programação, todos os tipos básicos de dados são internos. Além disso, muitas linguagens também fornecem um conjunto de tipos de dados compostos (tipo "string" em Java).

Eu gostaria de dizer desta maneira -
Um tipo de dado básico é um tipo de dados que não pode ser subdividido (o tipo "string" pode ser feito a partir de "char", mas o char não pode ser "quebrado" em nenhum tipo de dados (na maioria das linguagens de programação).

O tipo String, no SNOBOL4, é considerado primitivo. Embora eu não saiba o motivo exato. É tanto básico quanto embutido no SNOBOL4.

A especificação Java menciona claramente a lista de tipos de dados que ela considera como tipos primitivos. Como o tipo de string não está em sua especificação , ele não é um tipo de dados primitivo em Java, apesar de de ser um tipo interno.

    
por 16.03.2012 / 14:53
fonte
-2

Primitivos são tipos de dados fundamentais fornecidos pela própria linguagem. Exemplo na linguagem C são tipos de dados int, float, char. É fornecido como parte fundamental da linguagem.

Não primitivos são variáveis ou objetos definidos pelo usuário. Por exemplo, você pode definir um objeto que armazena dados ou pode usar struct em C para definir suas próprias variáveis. Eles não são primitivos porque você precisa defini-los primeiro para usá-los.

Examples: Employee, Student, a_very_large_number_that_you_defined_yourself

Edite com mais explicações e responda ao comentário Eu penso em primitivo como variáveis que vieram originalmente com a linguagem e não variáveis como String em C ++ que você tem que declarar usando a palavra-chave New. Isso faz dele um objeto, então uma String não seria primitiva.

Responda seu comentário: provavelmente tem a ver com a implementação da variável. Se era parte do núcleo da linguagem, é primitivo. Se não, não é. Exemplo é String em C ++. Esta não é uma variável central e é declarada usando a nova palavra-chave. Então não é primitivo.

    
por 14.03.2012 / 16:03
fonte
-2

Para entender melhor o conceito de tipos primitivos e tipos de dados definidos pelo usuário, tudo o que falta nas outras respostas é o conceito de compiler .

Se você entender o conceito de lexemes selecionados como tokens , você virá a saber que os primitivos são os únicos tipos de dados que um compilador conhece por si só.

    
por 09.04.2012 / 22:10
fonte

Tags