AULA 02 / 61 · ACESSO GRATUITO

Valores variáveis objetos e coleções

Graciliano TolentinoEngenharia Caracol · Edição 2.0
Nesta aula
  1. Representar uma informação
  2. Nomes e atribuições
  3. Um registro e uma lista de registros
  4. Copiar e transformar sem surpreender o chamador
  5. Exercício com dados fornecidos

Representar uma informação

O catálogo precisa distinguir um título, uma quantidade e uma autorização de exibição. Esses valores têm usos diferentes. Uma string representa texto, como Conserto de bicicletas. Um number permite representar números e operações numéricas. Um boolean tem os valores true e false. A palavra true escrita sem aspas é um booleano; o texto "true" entre aspas é uma string.

Essa distinção evita uma falha concreta: se um arquivo traz ativo como o texto "false", um teste que apenas pergunta se o valor existe pode tratá-lo como verdadeiro. O contrato do projeto exige um booleano. Contrato é a descrição explícita do que uma parte aceita e devolve. Mais adiante, a validação rejeitará os dados que não o cumprem.

Registro ilustrativo: id c01, titulo Revisão, descricao Caso fictício de revisão e ativo true. Os três primeiros são textos; ativo é booleano.Ampliar diagrama
Um registro tem campos e tipos definidos. O formato é o contrato do pacote. O validador rejeita registros inválidos e propriedades extras; a aparência do texto não substitui o tipo do valor.

Nomes e atribuições

const cria um vínculo que não poderá receber outro valor por uma nova atribuição. let permite trocar o valor associado ao nome. Escolha nomes que expressem a informação; titulo informa mais do que x. Palavras da linguagem, como const, precisam respeitar a sintaxe do JavaScript. Você pode escolher nomes em português para suas próprias variáveis.

javascript
const titulo = 'Revisão';
let vagas = 2;
vagas = vagas - 1;
console.log(titulo, vagas);

O programa calcula 2 menos 1 e guarda 1 em vagas. O lado direito de uma atribuição é avaliado antes de o nome receber o resultado. A igualdade estrita é escrita ===; vagas === 1 produz um booleano. Não confunda essa comparação com vagas = 1, que modifica o valor.

ExpressãoResultado e motivo
2 + 35 porque soma dois números.
'2' + '3'23 como texto, pois reúne strings.
true === 'true'false porque os tipos diferem.
2 === 2true porque valor e tipo coincidem.

Um registro e uma lista de registros

Um objeto agrupa propriedades relacionadas. No objeto caso, id é o identificador estável, titulo é o nome exibido, descricao explica o serviço e ativo controla se ele pode aparecer. A expressão caso.titulo lê uma propriedade. A ordem de escrita das propriedades não define uma sequência de execução do atendimento.

Um array reúne valores em uma sequência. Os índices começam em zero: casos[0] lê o primeiro item. Uma coleção vazia é escrita []. Vazia não significa inválida: pode ser um catálogo válido ainda sem serviços ativos. Ao procurar uma posição que não existe, o resultado pode ser undefined; acessar uma propriedade desse resultado sem verificar causa uma falha.

javascript
const titulo = 'Conserto de bicicletas';
const ativo = true;
const vagas = 2;
const caso = { id: 'CASO-001', titulo, descricao: 'Revisão básica.', ativo };
const casos = [caso];
console.log(typeof titulo, typeof ativo, typeof vagas);
console.log(casos[0].id, casos[0].ativo === true);

Salve e execute node 02_dados.mjs dentro de laboratorios_iniciais. A primeira saída identifica os tipos string boolean number. A segunda mostra CASO-001 true. O acesso casos[0].id primeiro encontra o registro e depois lê seu identificador. A expressão casos[0].ativo === true compara o valor com o booleano esperado.

Copiar e transformar sem surpreender o chamador

Uma função que recebe um array pode alterar o próprio array ou devolver outro. O contrato precisa tornar isso previsível. No projeto, a listagem pública produz novos objetos contendo somente id, titulo e descricao. Ela não muda a fonte e não expõe a propriedade ativo. Esse recorte de saída é uma decisão explícita, não uma consequência automática de usar JSON.

const não congela o interior de um objeto. Se const caso guarda um objeto, a instrução caso.titulo = "Outro" ainda pode modificar sua propriedade. O que fica impedido é atribuir um objeto inteiramente diferente ao mesmo nome caso. Essa diferença será relevante ao comparar o estado anterior e posterior de uma operação.

Exercício com dados fornecidos

Considere A com ativo true, B com ativo false e C com ativo "false". Indique os tipos dos três campos, quais registros cumprem o contrato e quais devem aparecer se todos os dados forem válidos. Resolva antes de consultar a resposta.

Ver solução comentada

Solução: A e B possuem booleanos e cumprem essa parte do contrato; C possui string e deve ser rejeitado. Em um conjunto válido formado apenas por A e B, somente A aparece. No projeto completo, a presença de C invalida o conjunto recebido, em vez de silenciosamente ocultar o erro. O comportamento foi escolhido para tornar a qualidade dos dados visível.

Para concluir, explique por que [] pode ser uma entrada válida, por que o primeiro índice é 0 e por que um nome declarado com const pode apontar para um objeto cujas propriedades mudam. Se sua resposta chamar "false" de booleano, retome a tabela antes de avançar.

Fontes relacionadas

Consulte os limites e as seções de apoio de cada referência.

S18
Conseguiu explicar o que aprendeu?

Tente o exercício antes de consultar a solução. Marque a aula para organizar sua leitura.

A conclusão desta leitura não equivale a certificação ou aceite de um projeto real. Teste os exemplos no escopo indicado e registre as limitações.