Em ciência da computação, tipos de dados primitivos são conjuntos de tipos de dados básicos a partir dos quais todos os outros tipos de dados são construídos. Especificamente, frequentemente se refere ao conjunto limitado de representações de dados usadas por um determinado processador, que todos os programas compilados devem usar. A maioria dos processadores suporta um conjunto semelhante de tipos de dados primitivos, embora as representações específicas variem. Mais geralmente, tipos de dados primitivos podem se referir aos tipos de dados padrão embutidos em uma linguagem de programação (tipos embutidos). Tipos de dados que não são primitivos são chamados de derivados ou compostos. Tipos primitivos são quase sempre tipos de valor, mas tipos compostos também podem ser tipos de valor.
Tipos de dados primitivos comuns Os tipos primitivos mais comuns são aqueles usados e suportados pelo hardware do computador, como inteiros de vários tamanhos, números de ponto flutuante e valores lógicos booleanos. Operações sobre tais tipos são geralmente bastante eficientes. Tipos de dados primitivos nativos do processador têm uma correspondência um-para-um com objetos na memória do computador, e operações sobre esses tipos são frequentemente as mais rápidas possíveis na maioria dos casos. A adição de inteiros, por exemplo, pode ser executada como uma única instrução de máquina, e alguns oferecem instruções específicas para processar sequências de caracteres com uma única instrução. Mas a escolha do tipo de dado primitivo pode afetar o desempenho, por exemplo, é mais rápido usar operações e tipos de dados SIMD para operar em um array de floats.
Números inteiros
Um tipo de dado inteiro representa alguma faixa de inteiros matemáticos. Inteiros podem ser com sinal (permitindo valores negativos) ou sem sinal (inteiros não negativos apenas). Faixas comuns são:
Números de ponto flutuante
Um número de ponto flutuante representa um número racional de precisão limitada que pode ter uma parte fracionária. Esses números são armazenados internamente em um formato equivalente à notação científica, tipicamente em binário, mas às vezes em decimal. Como os números de ponto flutuante têm precisão limitada, apenas um subconjunto de números reais ou racionais são exatamente representáveis; outros números só podem ser representados aproximadamente. Muitas linguagens têm ambos os tipos de precisão simples (frequentemente chamado de float) e precisão dupla (frequentemente chamado de double).
Booleanos
Um tipo booleano, tipicamente denotado bool ou boolean, é normalmente um tipo lógico que pode ter o valor verdadeiro ou o valor falso. Embora apenas um bit seja necessário para acomodar o conjunto de valores verdadeiro e falso, as linguagens de programação tipicamente implementam tipos booleanos como um ou mais bytes. Muitas linguagens (por exemplo, Java, Pascal e Ada) implementam booleanos aderindo ao conceito de Booleano como um tipo lógico distinto. Algumas linguagens, no entanto, podem implicitamente converter booleanos em tipos numéricos às vezes para dar semântica estendida a booleanos e expressões booleanas ou para alcançar compatibilidade retroativa com versões anteriores da linguagem. Por exemplo, as primeiras versões da linguagem de programação C que seguiram o ANSI C e seus padrões anteriores não tinham um tipo booleano dedicado. Em vez disso, valores numéricos zero são interpretados como falso, e qualquer outro valor é interpretado como verdadeiro. O mais novo C99 adicionou um tipo booleano distinto _Bool (mais tarde movido para bool, bem como as palavras-chave true e false com C23), e C++ suporta bool como um tipo embutido e true e false como palavras reservadas.
Linguagens específicas
Tipos básicos em C e C++
Em C e C++, existem minimamente quatro tipos, char, int, float e double, mas os qualificadores short, long, signed e unsigned significam que C contém numerosos tipos primitivos de inteiro e ponto flutuante dependentes da plataforma. C99 permitiu que o modificador long fosse usado duas vezes em combinação com int (por exemplo, long long int). Similarmente, signed e unsigned podem ser usados como modificadores para tipos integrais. C23 introduziu o tipo bool como um tipo de dado central, embora sempre tenha sido um tipo de dado central do C++. C++ também apresenta um tipo std::byte (semelhante ao Java). C e C++ também contêm size_t, intptr_t e outros tipos inteiros, para coisas como indexar arrays e coleções. Estes não são tipos de dados distintos, mas frequentemente apelidos (aliases) e são definidos pelo sistema. Eles são talvez semelhantes aos usize e isize do Rust.
Java Os tipos básicos do Java são semelhantes aos do C. O conjunto de tipos de dados primitivos da máquina virtual Java consiste em:
byte, short, int, long, char (tipos inteiros com uma variedade de faixas) float e double, números de ponto flutuante com precisões simples e dupla boolean, um tipo booleano com valores lógicos true e false returnAddress, um valor que se refere a um endereço de memória executável. Este não é acessível a partir da linguagem de programação Java e geralmente é deixado de lado.
XML Schema A linguagem XML Schema Definition fornece um conjunto de 19 tipos de dados primitivos:
string: uma string, uma sequência de pontos de código Unicode boolean: um booleano decimal: um número representado com notação decimal float e double: números de ponto flutuante duration, dateTime, time, date, gYearMonth, gYear, gMonthDay, gDay e gMonth: datas e horas hexBinary e base64Binary: dados binários codificados como hexadecimal ou Base64 anyURI: um URI QName: um nome qualificado NOTATION: um QName declarado como uma notação no esquema. Notações são usadas para incorporar tipos de dados não XML. Este tipo não pode ser usado diretamente — apenas tipos derivados que enumeram um conjunto limitado de QNames podem ser usados.
JavaScript Em JavaScript, existem 7 tipos de dados primitivos: string, number, bigint, boolean, symbol, undefined e null. Seus valores são considerados imutáveis. Estes não são objetos e não têm métodos ou propriedades; no entanto, todos os primitivos, exceto undefined e null, têm wrappers de objeto.
Visual Basic .NET Em Visual Basic .NET, os tipos de dados primitivos consistem em 4 tipos integrais, 2 tipos de ponto flutuante, um tipo decimal de 16 bytes, um tipo booleano, um tipo data/hora, um tipo caractere Unicode e um tipo string Unicode.
Rust Rust tem inteiros primitivos de largura fixa sem sinal e com sinal no formato u ou i respectivamente, seguido por qualquer largura de bit que seja uma potência de dois entre 8 e 128, fornecendo os tipos u8, u16, u32, u64, u128, i8, i16, i32, i64 e i128. Também estão disponíveis os tipos usize e isize, que são inteiros sem sinal e com sinal que têm a mesma largura de bit que uma referência, sendo o tipo usize usado para índices em arrays e tipos de coleção indexáveis. Rust também tem:
bool para o tipo booleano. f32 e f64 para números de ponto flutuante de 32 e 64 bits. char para um caractere unicode. Internamente, estes são inteiros sem sinal de 32 bits com valores que correspondem ao ponto de código do char, mas apenas valores que correspondem a um valor escalar unicode válido são válidos.
Tipos embutidos Os tipos embutidos se distinguem dos outros por terem suporte específico no compilador ou tempo de execução, na medida em que não seria possível simplesmente defini-los em um arquivo de cabeçalho ou módulo de biblioteca padrão. Além de inteiros, números de ponto flutuante e booleanos, outros tipos embutidos incluem:
O tipo void e o tipo de ponteiro nulo nullptr_t em C++11 e C23 Caracteres e strings (ver abaixo) Tupla em Standard ML, Python, Scala, Swift, Elixir Lista em Common Lisp, Python, Scheme, Haskell Número de ponto fixo com uma variedade de precisões e uma escala selecionada pelo programador. Número complexo em C99, Fortran, Common Lisp, Python, D, Go. Este é dois números de ponto flutuante, uma parte real e uma parte imaginária. Tipo enumerado sequência de nomes para valores permitidos; pode melhorar a legibilidade e a verificação de tipos. Número racional em Common Lisp Tipo Integer de precisão arbitrária em Common Lisp, Erlang, Haskell Arrays associativos, registros ou conjuntos em Perl, PHP, Python, Ruby, JavaScript, Lua, D, Go Referência (também chamada de ponteiro ou handle ou descritor), Símbolos, em Lisp Função de primeira classe, em todas as linguagens funcionais, JavaScript, Lua, D, Go e nos padrões mais recentes de C++, Java, C#, Perl
Caracteres e strings Um tipo caractere é um tipo que pode representar todos os caracteres Unicode, portanto deve ter pelo menos 21 bits de largura. Algumas linguagens como Julia incluem um verdadeiro tipo de caractere Unicode de 32 bits como primitivo. Outras linguagens como JavaScript, Python, Ruby e muitos dialetos de BASIC não têm um tipo caractere primitivo, mas em vez disso adicionam strings como um tipo de dado primitivo, tipicamente usando a codificação UTF-8. Strings com comprimento um são normalmente usadas para representar caracteres únicos. Algumas linguagens têm tipos caractere que são muito pequenos para representar todos os caracteres Unicode. Estes são mais propriamente categorizados como tipos inteiros aos quais foi dado um nome enganoso. Por exemplo, C inclui um tipo char, mas é definido como a menor unidade de memória endereçável, que vários padrões (como POSIX) exigem ter 8 bits. Versões recentes desses padrões referem-se a char como um tipo numérico. char também é usado para um tipo inteiro de 16 bits em Java, mas novamente este não é um tipo de caractere Unicode. O termo string também nem sempre se refere a uma sequência de caracteres Unicode, em vez disso, referindo-se a uma sequência de bytes. Por exemplo, x86-64 tem instruções string para mover, definir, pesquisar ou comparar uma sequência de itens, onde um item pode ter 1, 2, 4 ou 8 bytes de comprimento.
Ver também Lista de estruturas de dados Tipo objeto
Referências
Ligações externas Media relacionados com Tipo de dados primitivo no Wikimedia Commons Diferenças entre tipos primitivos e objetos

