Readme

JavaScript

JavaScript é a linguagem usada para ilustrar os fundamentos deste guia. A maioria dos princípios aqui (nomes expressivos, guard clauses, funções pequenas, fluxo linear) são transportáveis para qualquer linguagem.

Quick Reference: nomenclatura, verbos, taboos, tipos, controle de fluxo

Setup

Configuração inicial de um projeto Node.js: estrutura, módulos e pipeline.

TópicoConceitos
SecuritySecrets, env vars, dotenv, cadeia de config
Project FoundationEntry point, módulos, config, pipeline

Fundamentos

TópicoConceitos
Variablesconst, let, valor fixo por padrão
NamingcamelCase, UPPER_CASE, ordem semântica, inglês
FunctionsTamanho, top-down, direct return
Control FlowGuard clauses, early return, iterações
Visual DensityAgrupamento de linhas, return separado, fases de método

Avançados

TópicoConceitos
Error HandlingErros tipados, try/catch nos limites do sistema
Asyncasync/await, evitar bloqueio
TestingAAA, semantic assert, isolamento
Performancefor...of, Set, string building
ObservabilityLogging estruturado, níveis, PII, correlationId
ValidationSanitize, Zod, regras de negócio, output filter
DatesUTC, ISO 8601, parsing, Temporal API
Entity ModelingLean pointer ao canônico shared, #field privacy, Object.freeze, Symbol.iterator, instanceof boundary
Quick ReferenceNomenclatura, verbos, taboos

Frameworks

TópicoConceitos
Bot Discorddiscord.js: Client, Gateway Intents, Slash Commands, Embeds
Bot TelegramTelegraf: commands, Inline Keyboard, middleware, webhook
Bot WhatsAppBaileys e Meta Cloud API: webhook, Template Messages, command router
Bot SlackBolt for JS: slash commands, Events API, Block Kit, Socket Mode

Princípios

Forma: estrutura e narrativa da função

PrincípioDescrição
Escrita em inglêsCódigo universal, nomes curtos e sem ambiguidade
Código narrativoO código conta a história, sem precisar de comentários
Ponto de entrada limpoCaller de uma linha: o quê, não o como
Estilo verticalAté 3 parâmetros por linha; 4+ usa objeto
Orquestrador no topoChamada visível antes dos detalhes (top-down)
Detalhes abaixoHelpers ficam abaixo do orquestrador (step-down rule)
Sem lógica no retornoSaída de uma linha: o retorno nomeia o resultado, não o computa

Legibilidade: fluxo, densidade visual e nomes

PrincípioDescrição
Retorno antecipadoSaída cedo na falha, sem else após return
Fluxo linearAninhamento em cascata substituído por fluxo plano
Baixa densidade visualLinhas relacionadas juntas, grupos separados por uma linha em branco
Nomes expressivosVariáveis e funções que dispensam explicação
Código como documentaçãoNomes substituem comentários; comentários mentem
Sem valores mágicosConstantes nomeadas no lugar de números e strings soltos

Controle de qualidade: estado, erros, async e testes

PrincípioDescrição
Funções pequenasUma responsabilidade, um nível de abstração
Cálculo vs formataçãoComputar dados e formatar saída em funções separadas
Valor fixo por padrãoconst primeiro, let só quando necessário
CQSSeparar comando de consulta, sem efeitos colaterais ocultos
Dependências explícitasInjetar via parâmetros, evitar estado global
Falhar rápidoValidar cedo, interromper fluxo inválido
Retorno explícitoEvitar exceções como controle de fluxo
Contratos consistentesRespostas padronizadas, sempre o mesmo formato
Tratamento centralizado de errosClasses de erro tipadas, try/catch nos limites do sistema
I/O assíncronoasync/await, sem bloqueio
Testes estruturadosAAA: fases explícitas; assert limpo: sem expressões inline

Desenvolvido por @thiagocajadev · Fork baseado no repositório pmndrs/docs · Poimandres.