Avançar para o conteúdo
Imagem com logotipo, contendo link para a página inicial
  • United Stated of America flag, representing the option for the English language.
  • Bandeira do Brasil, simbolizando a opção pelo idioma Português do Brasil.

Aprenda Programação: Tipos de Dados

Exemplos de tipos de dados nas linguagens de programação Lua, Python, JavaScript e GDScript.

Créditos para a imagem: Imagem criada pelo autor usando o programa Spectacle.

Pré-Requisitos

Na introdução sobre ambientes de desenvolvimento, indiquei Python, Lua e JavaScript como boas escolhas de linguagens de programação para iniciantes. Posteriormente, comentei sobre GDScript como opção para pessoas que tenham interesse em programar jogos digitais ou simulações. Para as atividades de introdução a programação, você precisará de, no mínimo, um ambiente de desenvolvimento configurado em uma das linguagens anteriores.

Caso queira experimentar programação sem configurar um ambiente, você pode usar um dos editores online que criei:

Contudo, eles não possuem todos os recursos dos interpretadores para as linguagens. Assim, cedo ou tarde, você precisará configurar um ambiente de desenvolvimento. Caso precise configurar um, confira os recursos a seguir.

Assim, se você tem um Ambiente Integrado de Desenvolvimento (em inglês, Integrated Development Environment ou IDE) ou a combinação de editor de texto com interpretador, você está pronto para começar. Os exemplos assumem que você saiba executar código em sua linguagem escolhida, como apresentado nas páginas de configuração.

Caso queira usar outra linguagem, a introdução provê links para configuração de ambientes para as linguagens C, C++, Java, LISP, Prolog e SQL (com SQLite). Em muitas linguagens, basta seguir os modelos da seção de experimentação para adaptar sintaxe, comandos e funções dos trechos de código. C e C++ são exceções, por requerem o uso de ponteiros para acesso à memória.

Zeros e Uns Codificados e Decodificados

Uma das seções de Sistemas de Arquivos: Arquivos, Diretórios (Pastas) e Caminhos abordou codificação de dados. Em particular, mencionou-se que tudo que é codificado em um computador é composto por seqüências de dígitos zeros e uns. Embora o foco do tópico fosse o uso e o armazenamento de arquivos e diretórios, a codificação também aplica-se a código.

Em outras palavras, para você, esta página é composta por palavras e imagens. Para o computador, a página possui código e dados como seqüencias codificadas de números binários.

Trabalhar diretamente com seqüências binárias é uma das formas de programação de nível mais baixo. O processo é complicado, demorado e suscetível a erros.

Linguagens de programação abstraem codificações comuns como tipos de dados. Tipos de dados e operadores permitem escrever e manipular valores ou texto de forma mais simples, prática e conveniente.

Para ilustrar a comodidade decorrente do uso de tipos de dados, pode-se considerar um exemplo. Uma das formas mais simples de codificação de texto em computador chama-se American Standard Code for Information Interchange (ASCII). ASCII associa números aos caracteres do idioma Inglês e alguns códigos de controle. Para conferir associações, é possível consultar uma relação chamada tabela ASCII.

As três representações a seguir codificam a mesma palavra:

  1. A seqüência binária 01000110 01110010 01100001 01101110 01100011 011011112 codificada em ASCII. Cada grupo de oito dígitos binários corresponde a um byte;
  2. A seqüência decimal 70 114 97 110 99 11110 também codificada em ASCII;
  3. A seqüência de letras F, r, a, n, c e o para formar uma palavra.

Cada agrupamento de dígitos corresponde a um caractere. Qual das três formas é mais simples para ler e escrever a palavra Franco?

Para mais exemplos, você pode usar o botão a seguir. Ele fornece valores decimais e binários para cadeias de caracteres codificadas Unicode Transformation Format 16-bit (UTF-16), que são usadas por JavaScript.

Da mesma forma que existem tabelas para ASCII, existem tabelas para Unicode. Uma diferença é que tabelas para Unicode são significativamente maiores, pois elas podem codificar milhões de caracteres ao invés de, no máximo, 128 ou 256 valores, como ocorrem com ASCII e Extended ASCII, respectivamente.

Assim, utilizar representações de nível mais alto é mais prático e conveniente. Para facilitar atividades de programação, existem tipos de dados.

Tipos de Dados

O nível mais baixo para uso de dados em computadores é trabalhar com bits ou bytes. Computadores trabalham com valores binários, ou seja, seqüencias de bits. Programadoras e programadores trabalham com tipos de dados, que codificam seqüências binárias de forma mais conveniente.

Existem algumas classes de tipos de dados. Três são comumente usadas em programação: tipos primitivos, tipos compostos, e tipos para referência à outros tipos.

Tipos Primitivos (ou Tipos Básicos, Built-In ou Pré-Definidos)

Tipos primitivos, também chamados de tipos básicos, built-in (embutidos), homogêneos ou pré-definidos constituem a unidade básica de dados para programação.

Linguagens de programação comumente fornecem quatro tipos primitivos:

  1. Número inteiro;
  2. Número real (ou ponto flutuante);
  3. Valor lógico (ou booleano);
  4. Caractere (ou literal).

Algumas linguagens também definem um valor e/ou tipo especial para ausência de tipo (ou tipo vazio). Nomes comuns para indicar ausência de tipo includem void, NULL, null e nil. Esses valores também são comumente usados para indicar erros (ou ausência de erros), ou valores vazios ou inválidos.

Números Inteiros

Números inteiros e números reais codificam números, como na Matemática. Números inteiros representam o conjunto dos números inteiros. Exemplos de números inteiros incluem 0, -1, 1, 777, -1234.

console.log(1)
console.log(-123)
print(1)
print(-123)
print(1)
print(-123)
extends Node

func _init():
    print(1)
    print(-123)

O tipo número inteiro é comumente chamado de int ou integer.

Contudo, existem linguagens que definem apenas um tipo número, que vale tanto para números inteiros, quanto para números reais. Esse é o caso, por exemplo, de JavaScript e de versões antigas de Lua (até 5.2). No caso de Lua, a versão 5.3 adicionou um tipo inteiro à linguagem.

Além disso, deve-se notar que existem limites máximos e mínimos para números em linguagens de programação. Isso ocorre porque, embora números sejam infinitos, a memória de um computador é finita. A quantidade de números diferentes que se pode representar digitalmente depende da quantidade de memória empregada para a codificação de números. Para saber como computadores podem armazenar números muito grandes, você pode pesquisar por aritmética precisão arbitrária (arbitrary-precision arithmetic) (também chamada de big number ou bignum arithmetic).

Números Reais

Números em ponto flutuante (ou vírgula flutuante) aproximam o conjunto dos números reais. A escolha do termo "aproximam" é intencional, porque a codificação binária não permite representar todos os números com exatidão. Precisão absoluta é possível apenas com valores inteiros.

Em programação, a separação entre parte inteira e parte decimal normalmente é feita usando um ponto (.) ao invés de vírgula (,), pois linguagens de programação comumente assumem o Inglês como idioma. Assim, exemplos de números reais são 0.0, -1.0, 777.777, -1234.56.

Muitas linguagens de programação também permitem escrever números em notação científica ou na forma de multiplicação por potência de 10. Por exemplo, 1.23456789e4 é igual a , ou seja, o número 12345,6789, ou, em linguagem de programação, 12345.6789.

console.log(1.0)
console.log(-123.4567890)
console.log(1.23456789e4)
print(1.0)
print(-123.4567890)
print(1.23456789e4)
print(1.0)
print(-123.4567890)
print(1.23456789e4)
extends Node

func _init():
    print(1.0)
    print(-123.4567890)
    print(1.23456789e4)

O tipo número real é comumente chamado de real, float ou double. float ou double variam quanto a precisão da representação em ponto flutuante. Iniciantes normalmente devem optar pelo uso de double, quando a escolha for possível. A maior precisão (precisão dupla) tende a evitar surpresas e erros comuns, devido a imprecisões de representação e arredondamentos. Embora os erros continuem a existir com double, o dobro de precisão (por isso o nome) é mais conveniente em problemas comuns usados como aprendizado de aritmética computacional para iniciantes.

Números reais são úteis para problemas em que margens de erro sejam aceitáveis. Quando precisão for fundamental, deve-se usar números inteiros e adotar uma estratégia alternativa para representação da parte decimal. Para conhecer mais sobre isso, você pode pesquisar por aritmética de ponto flutuante de precisão arbitrária (arbitrary-precision floating-point arithmetic).

Valores Lógicos

Valores lógicos compreendem os valores verdade Verdadeiro (True) e Falso (False). Assim, todos os valores lógicos são True ou False; não há outra opção.

O nome do valor pode variar de linguagem para linguagem. Em JavaScript, Lua e GDScript, os termos são escritos em inglês com letras minúsculas. Em Python, o termo é escrito em inglês, com inicial maiúscula.

  • JavaScript: true e false;
  • Python: True e False;
  • Lua: true e false;
  • GDScript: true e false.
console.log(true)
console.log(false)
print(True)
print(False)
print(true)
print(false)
extends Node

func _init():
    print(true)
    print(false)

O tipo valor lógico é comumente chamado de bool ou boolean.

Caracteres

Caracteres compreendem todos os símbolos que se pode usar para se escrever texto, como letras, símbolos, dígitos, pontuação, espaçamento, e alguns valores especiais para controle e formatação. Valores especiais costumam começar com uma contra barra. Por exemplo, \n para a quebra de linha. Assim, um caractere pode ser, por exemplo, A, a, á, ., 1, (espaço), \n (quebra de linha).

Algo que pode ser confuso nos exemplos anteriores é o caractere 1. Ao invés de ser um número (1), ele é valor codificado como caractere. Para evitar confusões, linguagens de programação adotam uma sintaxe especial para valores do tipo literal, como aspas simples ou duplas. Assim, os exemplos anteriores ficariam 'A', 'a', 'á', '.', '1' ' ' e '\n'. Dessa forma, é mais fácil distinguir o número inteiro 1 do caractere '1'.

console.log("a", " ", "b")
print("a", " ", "b")
print("a", " ", "b")
extends Node

func _init():
    print("a", " ", "b")

O tipo caractere é comumente chamado de char ou character.

Tipos Compostos

Tipos primitivos são, como o nome sugere, básicos ou primitivos. Embora suficientes para muitos casos, eles também podem servir como base para a derivação de outros tipos de dados.

Existem casos em que pode ser interessante criar abstrações e representações que permitam pensar e trabalhar com soluções em nível mais alto. Para isso, muitas linguagens de programação definem (ou permitem a definição) de tipos compostos.

Embora eu, particularmente, normalmente use o termo "tipos compostos" como sinônimos para registros (records ou structs), o termo também se aplica a agrupamentos de valores de tipos primitivos. Os mais comuns são strings (cadeias de caracteres), arrays (vetores), sets (conjuntos), e unions (uniões). Eu prefiro pensar em agrupamentos como seqüencias ou como estruturas de dados (coleções de dados), mas o termo tipo composto também é aplicável para os casos anteriores.

Strings ou Cadeias de Caracteres

Cadeias de caracteres permitem armazenar e processar texto. No tópico anterior (Saída em Console (Terminal)), usou-se cadeias de caracteres para saída usando escrita de texto.

Quanto existente, o tipo cadeia de caracteres é comumente chamado de string. Existe uma cadeia de caracteres especial chamada de cadeia de caracteres vazia (cadeia vazia ou empty string), que é comumente representada como "" (aspas duplas sem conteúdo) ou '' (aspas simples sem conteúdo).

O uso de cadeias de caracteres pode ser tão simples quanto o uso do tipo primitivo Para iniciantes, é uma boa idéia escolher uma linguagem na qual o uso seja simples. Contudo, isso não ocorre em toda linguagem de programação.

Algumas linguagens permitem o uso do tipo básico caractere em seqüencias de caracteres, chamadas cadeias de caracteres (strings). Esse é comumente o caso para linguagens de alto nível, como JavaScript, Python, Lua e GDScript. Para iniciantes, esse é o melhor cenário, pois é mais simples de usar.

console.log("hello, world!")
console.log("Name: Franco\nSurname: Garcia")
print("hello, world!")
print("Name: Franco\nSurname: Garcia")
print("hello, world!")
print("Name: Franco\nSurname: Garcia")
extends Node

func _init():
    print("hello, world!")
    print("Name: Franco\nSurname: Garcia")

Outras linguagens diferenciam um único caractere de uma cadeia de caracteres. Isso pode acontecer, por exemplo, em linguagens de baixo ou médio nível, como C e C++. Em C e C++, 'A' e "A" são diferentes. No primeiro caso, usando aspas simples, trata-se da letra A maiúscula. No segundo caso, usando aspas duplas, trata-se de uma cadeia de caracteres com dois caracteres: a letra A maiúscula, ou seja, 'A' e um caractere especial implícito para terminação de cadeia de caractere, representado como \0 (normalmente com valor inteiro 0). A distinção é, comumente, um problema para iniciantes em programação.

Como C e C++ não estão nas linguagens adotada para exemplos, a discussão está fora do escopo desta página.

Além disso, para este momento, basta entender os tipos para números inteiros, números reais, valores lógicos e cadeias de caracteres. Os próximos tipos compostos serão objeto de estudo em tópicos apropriados; neste momento, eles servem apenas como curiosidade.

Arrays ou Vetores

Computadores são excelentes máquinas para repetir instruções. Em muitos problemas do mundo real, raramente processa-se apenas um elemento ou uma amostra, mas várias. É comum que problemas considerem dezenas, centenas, milhões de amostras semelhantes.

Estruturas de dados permitem armazenar valores e acessá-los a partir de uma chave (que é um valor arbitrário usado para acesso simplificado). Arrays ou vetores estão entre os exemplos mais simples de estruturas de dados, nas quais valores são armazenados em seqüência e acessados pela sua posição (ou índice) no vetor.

console.log(["Vermelho", "Verde", "Azul", "Azul"])
print(["Vermelho", "Verde", "Azul", "Azul"])
-- A rigor, trata-se uma tabela (table).
print({"Vermelho", "Verde", "Azul", "Azul"})
extends Node

func _init():
    print(["Vermelho", "Verde", "Azul", "Azul"])

Algumas linguagens de programação fornecem tipos pré-definidos para arrays. Outras fornecem para lists (listas). Algumas fornecem para ambos. Outras não fornecem nenhuma.

A distinção não é importante neste momento; o estudo de vetores ocorrerá em momento oportuno.

Sets ou Conjuntos

Conjuntos (sets) são estruturas de dados nas quais valores não admitem repetição, nem possuem ordem definida. Em linguagens que não forneçam um tipo para conjunto, pode-se usar um array sem repetições, desde que tome o cuidado de não adicionar duplicatas.

console.log(new Set(["Vermelho", "Verde", "Azul"]))
print({"Vermelho", "Verde", "Azul"})
print({"Vermelho", "Verde", "Azul"})
extends Node

func _init():
    print(["Vermelho", "Verde", "Azul"])

Unions ou Uniões

A título de curiosidade, algumas linguagens de programação (como C e C++) permitem a definição de uniões. Uma união agrupa valores de diferentes tipos em uma mesma região de memória. Por exemplo, uma união pode admitir valores do tipo inteiro, real e lógico. Contudo, apenas é possível usar um dos tipos por vez. Para o exemplo anterior, caso se use uma união com um valor real, não é possível usar, ao mesmo tempo, um valor inteiro ou um lógico.

Também existem linguagens de programação que definem um tipo chamado variant ou tagged union, que armazena um valor e um tipo. Por exemplo, Godot Engine define o tipo customizado Variant (uma classe) em C++ para compatibilidade com GDScript. O tipo Variant fornece um tipo de dado genérico para uso em C++.

Records ou Registros, e Objects ou Objetos

Um registro (record ou struct) é um tipo de dado que permite agrupar outros tipos de dados em um tipo personalizado. Por exemplo, caso se definir um registro que agrupe um número inteiro, um número real e um valor lógico, é possível armazenar qualquer combinação de valores para cada tipo anterior em um mesmo registro.

Em Programação Orientada a Objetos (POO ou OOP), uma classe é um registro que pode combinar dados e código, na forma de métodos (que são subrotinas, assim como funções ou procedimentos). Um objeto é uma possível instanciação de uma classe.

A criação de registros depende de variáveis, que será o próximo tópico de estudo. Para evitar adiantar conceitos, registros, classes e objetos serão abordados em momento oportuno.

Tipos Para Referência à Outros Tipos (Referências e Ponteiros)

Além de valores, existem tipos que podem abstrair endereços da memória de um computador. Endereços de computador são uma metáfora baseada em endereços reais. Um endereço real permite localizar uma pessoa ou organização específica dentro de uma região maior. Um endereço de computador é, por analogia, uma posição específica da memória na qual é possível localizar um valor.

Referências e ponteiros são implementações características de tipos para referenciar outros tipos. A importância desses tipos varia de acordo com a linguagem de programação.

Em linguagens de nível mais baixo, como C e C++, eles são essenciais. Em linguagens de alto nível, como Python, Lua e JavaScript, a linguagem abstrai e simplifica o uso de referências para a manipulação de memória.

Novamente, para evitar adiantar conceitos, tipos para referência serão apresentados em momento oportuno.

Tipagem

Tipagem refere-se a questões estilísticas e de verificação para tipos em linguagens de programação. Na prática, algumas linguagens exigem a definição explícita de tipos para quaisquer valores utilizados em um programa. Outras não fazem; como resultado, talvez você descubra incompatibilidades para o uso de tipos apenas quando executar seu programa.

Em geral, o termo preferível é type safety, que qualifica linguagens que forneçam recursos para garantias de segurança para usos de tipos, independentemente da necessidade de definição explícita de tipo. Nem toda linguagem permite usar tipos com total segurança, pois elas podem oferecer recursos como coerção. Coerção é uma tentativa de um interpretador ou compilador converter um valor de um tipo para outro automaticamente, sem a interferência de uma programadora ou programador. Ela nem sempre funciona corretamente; JavaScript é uma linguagem na qual pode ser arriscado depender de coerção sem conhecer os possíveis erros.

O restante da terminologia sobre tipagem é confusa.

Existem linguagens, como C, C++ e Java, que exigem que a programadora ou o programador defina explicitamente o tipo de cada dado usado em um programa. Essa exigência é, por vezes, chamada de tipagem forte. Ela também pode ser chamada de tipagem estática.

Existem linguagens que tentam inferir tipos a partir de valores usados. Em geral, essas linguagens são ditas como de tipagem fraca. Dependendo do caso, elas também podem ser chamadas de tipagem dinâmica.

Algumas linguagens, como Python, LISP, Rust e F#, combinam aspectos de diversas tipagem, de forma híbrida. Por exemplo, a linguagem pode ter tipagem dinâmica, mas o compilador ou interpretador podem determinar tipagem forte em tempo de execução (para linguagens interpretadas) ou de compilação (para linguagens interpretadas). Python é um desses casos, fornecendo algo chamado de duck typing, que tenta inferir características de um tipo baseado na forma de uso. Em linguagens como LISP, Rust e F#, é comum dizer que a linguagem faz inferência de tipo para assegurar a identificação do tipo correto a partir do uso.

Finalmente, existem linguagens que não possuem tipos. Um exemplo clássico é a linguagem assembly. A interpretação e a definição de que um valor representa em assembly ficam a cargo da desenvolvedora ou desenvolvedor do sistema.

Identificação de Tipos

Linguagens nas quais não se declara explicitamente o tipo de um dado costumam fornecer recursos para obtenção do tipo inferido. O comando ou a função necessária varia de acordo com a linguagem. Para tipos primitivos:

console.log(typeof(-1))
console.log(typeof(-1.0))
console.log(typeof(true))
console.log(typeof("string"))
print(type(-1))
print(type(-1.0))
print(type(True))
print(type("string"))
print(type(-1))
print(type(-1.0))
print(type(true))
print(type("string"))
extends Node

func _init():
    print(typeof(-1))
    print(typeof(-1.0))
    print(typeof(true))
    print(typeof("string"))

Conversão de Tipos Primitivos

Existem situações nas quais pode ser necessário converter um valor de um tipo para outro. Por exemplo:

  • Converter um número inteiro para número real (ou vice-versa);
  • Converter um número inteiro para cadeia de caracteres (ou vice-versa);
  • Converter um número real para cadeia de caracteres (ou vice-versa);
  • Converter um número inteiro para valor lógico (ou vice-versa);
  • Converter um número real para valor lógico (ou vice-versa);
  • Converter uma cadeia de caracteres para valor lógico (ou vice-versa).

Dos casos anteriores, é possível converter texto (cadeias de caracteres) para números apenas caso elas, de fato, representem um número. Caso contrário, a conversão falhará.

Neste momento, não é possível tratar erros sem introduzir novos conceitos. Em programas reais, é necessário tratá-los para evitar problemas (como o programa travar).

Em linguagens sem coerção, a conversão de um valor de um tipo para outro é obrigatória quando se deseja combinar valores de diferentes tipos. Em linguagens com coerção, ela é opcional. Pessoalmente, eu recomendaria fazer a conversão explicitamente quando possível, exceto caso a linguagem forneça bom type safety.

Convenções para conversões de tipos podem variar de acordo com linguagem de programação.

  • JavaScript:
  • Python:
  • Lua:
    • Conversão para cadeia de caracteres: tostring() (documentação);
    • Conversão para número inteiro ou número real: tonumber() (documentação);
    • Conversão para valor lógico: fazer comparação. O exemplo compara com a cadeia de caracteres vazia como false, para resultados similares com as outras linguagens adotadas. Caso preferir, a poder-se-ia alterar a comparação para outro valor.
  • GDScript:
console.log(String(123))
console.log(String(123.456))
console.log(String(true))

console.log(Number("123"))
console.log(parseInt("123"))
console.log(Number("123.456"))
console.log(parseFloat("123.456"))
console.log(Number(true))

console.log(Boolean(1))
console.log(Boolean(1.0))
console.log(Boolean(0))
console.log(Boolean(0.0))
console.log(Boolean("true"))
console.log(Boolean("false")) // Cuidado: retorna true!
console.log(Boolean("")) // Apenas a cadeia de caracteres vazia retorna falso.
print(str(123))
print(str(123.456))
print(str(True))

print(int("123"))
print(int(123.456))
print(int(True))

print(float("123"))
print(float("123.456"))
print(float(123))
print(float(True))

print(bool(1))
print(bool(1.0))
print(bool(0))
print(bool(0.0))
print(bool("True"))
print(bool("False")) # Cuidado: retorna True!
print(bool("")) # Apenas a cadeia de caracteres vazia retorna falso.
print(tostring(123))
print(tostring(123.456))
print(tostring(true))

print(tonumber("123"))
print(tonumber(123.456))
print(tonumber(true)) -- Cuidado: retorna nil!
print(true and 1 or 0) -- Alternativa para retornar 1 para o valor lógico true.
print(false and 1 or 0) -- e 0 para false.

print(tonumber("123"))
print(tonumber("123.456"))
print(tonumber(123))
print(tonumber(true)) -- Cuidado: retorna nil!
print(true and 1.0 or 0.0)
print(false and 1.0 or 0.0)

print(1 ~= 0)
print(1.0 ~= 0.0)
print(0 ~= 0)
print(0.0 ~= 0.0)
print("true" ~= "")
print("false" ~= "") -- Cuidado: retorna true!
print("" ~= "") -- Apenas a cadeia de caracteres vazia retorna falso.
extends Node

func _init():
    print(str(123))
    print(str(123.456))
    print(str(true))

    print(int("123"))
    print(int(123.456))
    print(int(true))

    print(float("123"))
    print(float("123.456"))
    print(float(123))
    print(float(true))

    print(bool(1))
    print(bool(1.0))
    print(bool(0))
    print(bool(0.0))
    print(bool("true"))
    print(bool("false")) # Cuidado: retorna true!
    print(bool("")) # Apenas a cadeia de caracteres vazia retorna falso.

Em linguagens de programação sem tipo inteiro, como fazer para transformar um número real em um número inteiro? Uma forma simples é truncar o valor ou arrendondá-lo para baixo. Isso é possível em qualquer linguagem de programação, usando uma função como floor().

console.log(Math.floor(Number("123")))
console.log(Math.floor(Number("123.456")))
console.log(Math.floor(Number(true)))
import math

print(math.floor(float("123")))
print(math.floor(float(123.456)))
print(math.floor(float(True)))
print(math.floor(tonumber("123")))
print(math.floor(tonumber(123.456)))
print(math.floor(true and 1.0 or 0.0))
extends Node

func _init():
    print(floor(float("123")))
    print(floor(float(123.456)))
    print(floor(float(true)))

Em Python e GDScript, o uso do truncamento tem apenas fins ilustrativos. É mais simples e claro usar int() para a conversão, que converter o valor para número real, depois eliminar a parte decimal.

Novos Itens para Seu Inventário

Ferramentas:

  • Tabela ASCII;
  • Tabela Unicode.

Habilidades:

  • Escolha de tipo de dados para representações e abstrações.

Conceitos:

  • Tipos de dados primitivos;
  • Tipos de dados compostos;
  • Números inteiros;
  • Número reais;
  • Caracteres;
  • Cadeias de caracteres;
  • Valores lógicos.

Recursos de programação:

  • Tipos de dados;
  • Conversões entre tipos de dados.

Pratique

Quais tipos primitivos você escolheria para representar os seguintes dados:

  1. Nome;
  2. Nome e sobrenome;
  3. Dia de nascimento;
  4. Mês de nascimento;
  5. Ano de nascimento;
  6. Data de nascimento;
  7. Dia da semana;
  8. Apelido de um animal de estimação;
  9. Altura em metros;
  10. Altura em centímetros;
  11. Peso em quilogramas;
  12. Horário;
  13. Endereço (rua, número, bairro, cidade, país, CEP);
  14. Número de telefone;
  15. Uma resposta sim ou não;
  16. O volume de uma garrafa;
  17. A resposta para confirmar ou cancelar uma ação;
  18. O conteúdo de um livro;
  19. O estado de uma lâmpada (acesa ou apagada);
  20. Uma lista de compras;
  21. A temperatura de um forno;
  22. A letra de uma música;
  23. A pontuação da fase de um jogo;
  24. A resposta para uma questão de múltiplas escolhas;
  25. O grau de parentesco entre duas pessoas;
  26. A quantidade de farinha necessária para fazer a massa de um pão;
  27. A velocidade máxima de um carro de corrida;
  28. O tamanho da fonte para apresentação de um texto;
  29. O estado de um pedido: pago ou não;
  30. O estado da entrega de um pedido: pagamento confirmado, pedido separado, pedido em transporte, pedido entregue.

Caso necessário, você pode dividir um conjunto de dados em dados menores e escolher tipos diferentes para cada um deles. Por exemplo, a data de nascimento pode admitir três valores: dia, mês e ano. Caso necessário, cada um deles pode ter um tipo de dado diferente. Você também poderia incluir um horário, se quisesse.

Alguns itens podem admitir mais de um tipo primitivo. Caso você identifique tal situação, quais tipos alternativos você poderia usar?

A rigor, você poderia escolher o tipo caractere para todas as respostas, mas ele nem sempre é o mais conveniente. Por que?

Próximos Passos

A escolha de tipos de dados para representar objetos e estados de processos do mundo real ocorre em todo programa de computador. Um programa sem dados começa e termina, sem operações intermediárias. Qualquer operação intermediária que não seja vazia requer dados.

Números, caracteres e os valores Verdadeiro, e Falso são os tipos primitivos usuais em linguagens de programação. Eles estão presentes do mais simples dos sistemas até os mais complexos. Por exemplo, do programa Olá, mundo! até seu sistema operacional. Você consegue observar computador e identificar alguns dos tipos de dados usados em seus programas favoritos?

Para transformar dados em informações, você precisará manipulá-los. Para isso, você precisará de operações e de uma forma de armazenar resultados em memória, para não perder os resultados e ter que recalculá-los sempre que necessário.

O próximo tópico introduz variáveis, para que você possa armazenar os dados durante a execução de um programa.

  1. Introdução;
  2. Ponto de entrada e estrutura de programa;
  3. Saída (para console ou terminal);
  4. Tipos de dados;
  5. Variáveis e constantes;
  6. Entrada (para console ou terminal);
  7. Aritmética e Matemática básica;
  8. Operações relacionais e comparações;
  9. Operações lógicas e Álgebra Booleana;
  10. Estruturas de condição (ou condicionais ou de seleção);
  11. Subrotinas: funções e procedimentos;
  12. Estruturas de repetição (ou laços ou loops);
  13. Vetores (arrays), cadeias de caracteres (strings), coleções (collections) e estruturas de dados;
  14. Registros (structs ou records);
  15. Arquivos e serialização (serialization ou marshalling);
  16. Bibliotecas;
  17. Entrada em linha de comando;
  18. Operações bit-a-bit (bitwise operations);
  19. Testes e depuração.
  • Informática
  • Programação
  • Iniciante
  • Pensamento Computacional
  • Aprenda a Programar
  • Python
  • Lua
  • Javascript
  • Godot
  • Gdscript