Dados como matéria-prima do software
Programas existem para transformar dados: ler entrada, aplicar regras, produzir saída. Antes de frameworks e bancos de dados, domine como sua linguagem representa informação na memória — tipos primitivos, coleções, objetos e o comportamento de referências.
Variáveis e constantes
Variável é um nome simbólico para um valor armazenado. Constante (const) impede reatribuição do nome; o conteúdo referenciado pode ser mutável se for objeto ou array.
const ANO_FISCAL = 2026;
let saldoConta = 1200.50;
saldoConta += 300;
// ANO_FISCAL = 2027; // erro: reatribuição proibida
Tipos primitivos em JavaScript
| Tipo | Exemplo | Observação |
|---|---|---|
| number | 42, 3.14 | IEEE 754; cuidado com centavos em finanças |
| string | 'SP', `Olá ${nome}` | Template literals facilitam interpolação |
| boolean | true, false | Resultado de comparações |
| null | null | Ausência intencional |
| undefined | undefined | Variável não inicializada ou propriedade inexistente |
Escopo: onde o nome é visível
const empresa = 'Dev Journal';
function calcularBonus(funcionario) {
const taxa = 0.08; // local à função
return funcionario.salario * taxa;
}
{
let rascunho = 'notas da reunião';
}
// rascunho não existe aqui — ReferenceError se acessado
Arrays: listas ordenadas
const notas = [7.5, 8.0, 6.5, 9.0];
const aprovados = notas.filter(n => n >= 7);
const media = notas.reduce((acc, n) => acc + n, 0) / notas.length;
console.log({ aprovados, media });
Métodos map, filter, reduce expressam transformações sem loops manuais — padrão comum em código profissional moderno.
Objetos: registros com campos nomeados
const cliente = {
id: 'C-1024',
nome: 'Ana Costa',
plano: 'premium',
pedidos: [
{ id: 1, total: 320.50 },
{ id: 2, total: 89.00 }
]
};
const totalPedidos = cliente.pedidos.reduce((s, p) => s + p.total, 0);
Referência vs cópia
Objetos e arrays são atribuídos por referência — duas variáveis podem apontar para o mesmo endereço na memória:
const original = { itens: [1, 2] };
const copiaSuperficial = { ...original };
copiaSuperficial.itens.push(3);
console.log(original.itens.length); // 3 — array interno compartilhado
const copiaProfunda = structuredClone(original);
copiaProfunda.itens.push(99);
console.log(original.itens.length); // ainda 3
Em fluxos críticos (edição de formulários, estado de UI), entender essa diferença evita bugs “fantasma” difíceis de reproduzir.
Finanças e ponto flutuante
0.1 + 0.2 === 0.3 é false em JavaScript. Para valores monetários, armazene centavos como inteiros ou use biblioteca decimal — padrão em sistemas de pagamento.
function reaisParaCentavos(valor) {
return Math.round(valor * 100);
}
function centavosParaReais(centavos) {
return centavos / 100;
}
Modelagem mínima de domínio
Antes de classes e ORM, pratique agrupar dados relacionados:
function criarPedido(id, itens) {
const subtotal = itens.reduce((s, i) => s + i.preco * i.qtd, 0);
return {
id,
itens: structuredClone(itens),
subtotal,
criadoEm: new Date().toISOString()
};
}
Exercícios recomendados
- Array de transações: filtrar créditos, somar total, encontrar maior valor.
- Objeto funcionário com dependentes: calcular desconto de plano de saúde por faixa etária.
- Detectar quando mutação acidental altera objeto global — corrigir com clone.
Memória: onde os dados “moram” enquanto rodam
Quando você declara const cliente = { nome: 'Ana' }, o objeto vive na RAM do processo Node ou do navegador. Encerrou o processo, variáveis locais somem — por isso persistimos em disco (arquivo, banco) ou localStorage na web. Conectar este post ao de Como um computador funciona ajuda a entender por que copiar objeto errado gera bug “fantasma”.
Para aprofundar na web
Para entender melhor este tema, pesquise por:
- "tipos primitivos JavaScript MDN" — referência oficial de number, string, boolean
- "passagem por referência vs valor JavaScript" — mutação acidental em objetos
- "structuredClone vs spread JavaScript" — quando copiar profundamente
- "IEEE 754 ponto flutuante explicado" — por que centavos exigem cuidado
- "escopo variável JavaScript let const" — visibilidade e blocos
Pratique no console do navegador (F12) antes de scripts longos — feedback imediato.
Atividades
Por que 0.1 + 0.2 !== 0.3 em JavaScript?
Ver resposta
Resposta correta: B) Limitação de representação binária de ponto flutuante
Números IEEE 754 não representam todas as frações decimais com exatidão; use inteiros de centavos ou biblioteca decimal em finanças.
spread {...obj} cria:
Ver resposta
Resposta correta: B) Cópia rasa: propriedades de primeiro nível duplicadas, aninhados por referência
Spread clona primeiro nível; arrays/objetos internos ainda podem ser compartilhados — use structuredClone para profundidade.
undefined difere de null porque:
Ver resposta
Resposta correta: B) null é ausência intencional; undefined costuma indicar não inicializado ou ausente
=== distingue null e undefined; APIs usam null para 'sem valor' explícito.
Dado um array de pedidos com campo total, descreva os passos para obter o total geral sem modificar o array original.
Ver resposta
Usar reduce somando pedido.total com acumulador inicial 0, ou for...of acumulando em variável separada; não usar push/pop no array fonte; opcionalmente validar totais numéricos antes da soma.
0 comments