The Code Codex
Tema
← Notas / Fundamentos

nota · texto05 out 2024 · 1 min

Tipos de dados

Todo valor em um programa tem um tipo, que define duas coisas: quanto espaço ele ocupa na memória e quais operações fazem sentido com ele (somar dois números faz; somar dois booleanos, não).

Primitivos e compostos
  • Primitivos: os blocos básicos, que a linguagem já traz: inteiros, ponto flutuante, booleanos, caracteres.
  • Compostos: construídos a partir de outros tipos: arrays, listas, mapas, structs, classes.
GoJava
Inteirosint8, int16, int32, int64, int (32 ou 64 bits, conforme a plataforma), versões uint sem sinalbyte (8), short (16), int (32), long (64), todos com sinal
Ponto flutuantefloat32, float64float, double
Booleanoboolboolean
Caracterebyte (= uint8), rune (= int32, um código Unicode)char (16 bits, UTF-16)
TextostringString (é uma classe, não um primitivo)
Estática × dinâmica, forte × fraca
  • Estática (Go, Java): o tipo de cada variável é conhecido na compilação, e erros de tipo nem compilam.
  • Dinâmica (Python, JavaScript): o tipo é verificado durante a execução.
  • Forte: a linguagem não converte tipos sozinha de forma surpreendente (Go não deixa somar int com float64 sem conversão explícita).
  • Fraca: converte implicitamente ("1" + 1 em JavaScript dá "11").
Cuidado: overflow silencioso

Cada inteiro tem um limite. Ao passar dele, o valor “dá a volta” sem erro:

var x int32 = math.MaxInt32 // 2147483647
x++
fmt.Println(x) // -2147483648
int x = Integer.MAX_VALUE; // 2147483647
x++;
System.out.println(x); // -2147483648

Para valores que podem crescer (contadores, dinheiro em centavos), use int64/long. Em Java, Math.addExact lança exceção em vez de dar a volta.

Veja também: Variáveis e constantes, Strings e tipos em Go.