Lógica antes de linguagem
Antes de escolher JavaScript, Python ou qualquer sintaxe, existe um passo universal: traduzir um problema em passos finitos e não ambíguos. Esse é o núcleo da lógica de programação. Linguagens são dialetos; lógica é gramática do pensamento computacional.
Considere um processo administrativo: “aprovar solicitação de reembolso”. No papel humano, há margem para interpretação. No software, cada condição precisa ser explicitada — inclusive o que acontece quando dados estão incompletos.
Pseudocódigo: rascunho sem amarras de sintaxe
FUNÇÃO aprovarReembolso(solicitacao):
SE solicitacao.valor <= 0 ENTÃO
RETORNAR erro "Valor inválido"
FIM SE
SE solicitacao.anexos está vazio ENTÃO
RETORNAR erro "Comprovante obrigatório"
FIM SE
SE solicitacao.valor > limiteGerente ENTÃO
RETORNAR status "PENDENTE_DIRETORIA"
SENÃO
RETORNAR status "APROVADO"
FIM SE
FIM FUNÇÃO
Repare: tratamos entradas inválidas cedo (guard clauses). Definimos limiar de valor. Cada caminho retorna um estado claro. Só depois disso vale abrir o editor.
Traduzindo para JavaScript
const LIMITE_GERENTE = 1500;
function aprovarReembolso(solicitacao) {
if (solicitacao.valor <= 0) {
return { ok: false, motivo: 'Valor inválido' };
}
if (!solicitacao.anexos || solicitacao.anexos.length === 0) {
return { ok: false, motivo: 'Comprovante obrigatório' };
}
if (solicitacao.valor > LIMITE_GERENTE) {
return { ok: true, status: 'PENDENTE_DIRETORIA' };
}
return { ok: true, status: 'APROVADO' };
}
Operadores lógicos: combinando condições
Regras de negócio raramente usam uma única comparação. Três operadores dominam:
- && (E): todas as condições devem ser verdadeiras.
- || (OU): ao menos uma verdadeira.
- ! (NÃO): inverte booleano.
function elegivelFreteGratis(cliente, pedido) {
const assinanteAtivo = cliente.plano === 'premium' && cliente.ativo === true;
const pedidoAlto = pedido.total >= 300;
const produtoFisico = pedido.itens.some(item => item.tipo === 'fisico');
return produtoFisico && (assinanteAtivo || pedidoAlto);
}
Teste mentalmente cenários: assinante inativo com pedido baixo (false), pedido alto sem produto físico (false), assinante ativo com produto físico (true).
Tabelas verdade: quando a regra confunde
Para duas condições A e B:
| A | B | A && B | A || B |
|---|---|---|---|
| true | true | true | true |
| true | false | false | true |
| false | true | false | true |
| false | false | false | false |
Quando stakeholders discordam da regra, volte à tabela. Muitos bugs nascem de “E vs OU” mal especificado em reunião.
Decomposição: problema grande → partes testáveis
Exemplo: calcular folha de horas extras.
- Validar entrada (horas normais, horas extras, valor hora).
- Calcular pagamento base: horas normais × valor.
- Calcular extras com multiplicador (ex.: 1,5×).
- Somar e arredondar centavos.
- Retornar objeto com breakdown para auditoria.
Cada etapa vira função pequena. Funções pequenas são testáveis no console antes de integrar.
Erros clássicos de iniciantes (e como evitar)
- Comparar com = em vez de ===: em JavaScript, use === para evitar coerção implícita.
- Condições sobre dados que podem ser null: verifique existência antes de acessar propriedade.
- Regra incompleta: “e se nenhum dos casos?” — sempre defina else ou retorno padrão.
Exercício guiado
Implemente classificarImc(imc) com faixas OMS (abaixo 18,5; normal até 25; sobrepeso até 30; obesidade acima). Valide: imc negativo retorna erro. Teste no mínimo cinco valores incluindo limites exatos (18.5, 25, 30).
Para aprofundar na web
Para entender melhor este tema, pesquise por:
- "pseudocódigo programação exemplos" — praticar lógica sem sintaxe
- "operadores lógicos AND OR NOT programação" — tabelas verdade e combinações
- "fluxograma algoritmo como desenhar" — visualizar ramificações antes do código
- "guard clauses programação" — retorno antecipado e menos aninhamento
- "decomposição de problemas programação" — dividir tarefas grandes em funções
Desenhe fluxograma de um processo do seu trabalho antes de codificar — valida regra com você mesmo.
Atividades
Qual é a principal vantagem do pseudocódigo antes do código?
Ver resposta
Resposta correta: B) Separar regras de negócio de detalhes de sintaxe
Pseudocódigo permite validar lógica com stakeholders e consigo mesmo antes de escolher construtos da linguagem.
Em elegivelFreteGratis, por que produtoFisico entra na condição final?
Ver resposta
Resposta correta: A) Porque frete só faz sentido para itens físicos
Produtos digitais não têm logística de envio; a regra de frete grátis aplica-se ao contexto físico.
Guard clause significa:
Ver resposta
Resposta correta: B) Tratar casos inválidos no início e retornar cedo
Guard clauses reduzem aninhamento tratando falhas e entradas inválidas antes do fluxo principal.
Escreva pseudocódigo para decidir se um funcionário pode acessar o sistema fora do horário comercial (depende de perfil e autorização prévia).
Ver resposta
Exemplo: SE não autenticado RETORNAR negado. SE horário entre 8h-18h RETORNAR permitido. SE perfil admin RETORNAR permitido. SE possui autorizacaoExtra válida RETORNAR permitido. SENÃO RETORNAR negado.
0 comments