Readme

JavaScript

JavaScript é a linguagem que este guia usa para mostrar os fundamentos, porque ela deixa cada decisão à vista: nada obriga a nomear bem, a sair cedo de uma função ou a manter o fluxo plano. O que você aprende aqui viaja com você. Nomes expressivos, guard clauses, funções pequenas e fluxo linear valem igual em C#, Python ou Go, e cada página aponta o equivalente na outra linguagem quando ele existe.

Referência rápida: nomenclatura, verbos, nomes proibidos, tipos, controle de fluxo

Setup

O que se decide antes da primeira linha de domínio: onde a configuração é lida, como os módulos se dividem e onde os segredos ficam.

TópicoConceitos
Fundação do projetoEntry point, módulos por domínio, config, middleware
SegurançaSegredos, variáveis de ambiente, dotenv, JWT

Fundamentos

TópicoConceitos
Variáveisconst, let, valor fixo por padrão
NomescamelCase, UPPER_CASE, ordem semântica, inglês
FunçõesTamanho, top-down, retorno direto
Controle de fluxoGuard clauses, retorno antecipado, iterações
Densidade visualAgrupamento de linhas, return separado, fases do método

Avançados

TópicoConceitos
Tratamento de errosErros tipados, try/catch nos limites do sistema
Programação assíncronaasync/await, evitar bloqueio
TestesAAA, assert com significado, isolamento
Performancefor...of, Set, montagem de string
ObservabilidadeLog estruturado, níveis, PII, correlationId
ValidaçãoSanitize, Zod, regras de negócio, filtro de saída
DatasUTC, ISO 8601, interpretação de texto, Temporal API
Modelagem de entidadesPonteiro enxuto ao canônico shared, privacidade com #field, Object.freeze, Symbol.iterator, instanceof no limite
Referência rápidaNomenclatura, verbos, nomes proibidos

Frameworks

TópicoConceitos
Bot Discorddiscord.js: conexão ao Gateway, intents, slash commands, embeds
Bot TelegramTelegraf: comandos, botões inline, middleware, webhook
Bot WhatsAppBaileys e Meta Cloud API: sessão, webhook, mensagem por template
Bot SlackBolt for JS: ack em 3s, eventos, 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

DoDocs v3.7.0 · Desenvolvido por @thiagocajadev · Baseado no trabalho de pmndrs/docs · Poimandres.