← Blog · · Equipe ConvertCaseHQ · 7 min de leitura

camelCase, snake_case, kebab-case: o guia rápido para desenvolvedores

Aqui vai a versão curta. Tipos e classes levam PascalCase em quase todas as linguagens. Variáveis e funções levam camelCase em JavaScript, Java, C#, Kotlin e Swift, mas snake_case em Python, Ruby e Rust. Constantes levam SCREAMING_SNAKE_CASE na maioria das linguagens, com Go, Swift, C# e o C++ no estilo do Google como exceções. Tudo o que vai parar numa URL, num arquivo CSS ou num nome de pacote costuma ser kebab-case em minúsculas, e as variáveis de ambiente ficam em maiúsculas, com sublinhados.

Esse é o padrão. Os detalhes é que rendem discussão nos code reviews, então este guia rápido se limita ao que o guia de estilo oficial, ou o mais usado, de cada linguagem realmente diz, e cita a fonte de cada uma.

camelCase, snake_case, kebab-case: os cinco estilos e seus outros nomes

  • camelCase (orderTotal): primeira palavra em minúsculas, cada palavra seguinte com inicial maiúscula. Também chamado de lowerCamelCase; a PEP 8 o chama de mixedCase.
  • PascalCase (OrderTotal): todas as palavras com inicial maiúscula. Também UpperCamelCase, CapWords (PEP 8) ou StudlyCaps (PSR-1 do PHP).
  • snake_case (order_total): palavras em minúsculas unidas por sublinhados.
  • SCREAMING_SNAKE_CASE (ORDER_TOTAL): palavras em maiúsculas unidas por sublinhados. O guia de JavaScript do Google o chama de CONSTANT_CASE, e o de Java, de UPPER_SNAKE_CASE.
  • kebab-case (order-total): palavras em minúsculas unidas por hifens. A maioria das linguagens não pode usá-lo em identificadores, porque o hífen é o sinal de menos.

Para trocar um nome de um estilo para outro, cole-o no nosso conversor de maiúsculas e minúsculas. Ele separa por espaços, sublinhados, hifens e maiúsculas já existentes, então order_total, order-total e OrderTotal se convertem sem problemas entre si. Converta um nome por vez, porém: ele trata tudo o que está na caixa como um único identificador.

Guia rápido: convenções de nomenclatura por linguagem

LinguagemVariáveis e funçõesClasses e tiposConstantesFonte
JavaScript, TypeScriptcamelCasePascalCaseCONSTANT_CASE para valores de nível de módulo que nunca mudamGuias de estilo de JavaScript e TypeScript do Google
JavacamelCasePascalCaseUPPER_SNAKE_CASE para campos static final profundamente imutáveisGoogle Java Style Guide
KotlincamelCasePascalCaseSCREAMING_SNAKE_CASE para const e para valores de nível superior ou de objetos profundamente imutáveisKotlin coding conventions
C#camelCase para variáveis locais e parâmetros, _camelCase para campos privados, PascalCase para métodos e membros públicosPascalCase, com o prefixo I para interfaces (IWorkerQueue)PascalCaseDocumentação do .NET, da Microsoft
SwiftcamelCasePascalCasecamelCaseSwift API Design Guidelines
GocamelCase se não exportado, PascalCase se exportadoMesma regraTambém MixedCaps (MaxPacketSize)Effective Go, Google Go Style
Pythonsnake_casePascalCase (CapWords)UPPER_SNAKE_CASEPEP 8
Rubysnake_casePascalCaseSCREAMING_SNAKE_CASERuby Style Guide
Rustsnake_casePascalCase (UpperCamelCase)SCREAMING_SNAKE_CASERust API Guidelines (RFC 430)
PHPmétodos em camelCase; as propriedades ficam por sua contaPascalCase (StudlyCaps)Constantes de classe em UPPER_SNAKE_CASEPSR-1
C++variáveis em snake_case, funções em PascalCasePascalCasekDaysInAWeekGoogle C++ Style Guide (um entre vários)

Algumas linhas pedem uma nota de rodapé. Em Go, a primeira letra nem é uma escolha de estilo: é a regra de visibilidade. Area é exportado do seu pacote e area não é, e o compilador faz valer isso. O C++ não tem uma convenção para a linguagem toda; a própria biblioteca padrão usa snake_case (std::unordered_map, push_back), então trate a linha do Google como uma opção bem documentada, não como a regra.

O Rust é incomumente rígido com o estilo. O compilador avisa já de fábrica: escreva fn GetUser() ou struct user_account e o rustc sugere get_user e UserAccount antes mesmo de você rodar um linter.

Nomes de arquivos, módulos e pacotes

  • Java: uma classe pública de nível superior precisa ficar num arquivo com exatamente o seu nome, maiúsculas incluídas. OrderService vai em OrderService.java, e o javac rejeita qualquer outra coisa.
  • Kotlin: um arquivo que contém uma única classe leva o nome dessa classe. Os demais arquivos recebem um nome descritivo em UpperCamelCase, como ProcessDeclarations.kt.
  • Python: os módulos recebem nomes curtos, todos em minúsculas, com sublinhados se ajudarem na legibilidade. Os pacotes também devem ser curtos e em minúsculas, e a PEP 8 desaconselha sublinhados neles.
  • Ruby: arquivos em snake_case com o nome da classe que contêm, então HelloWorld fica em hello_world.rb.
  • Go: nomes de pacote são palavras únicas em minúsculas, sem sublinhados nem mixedCaps: base64, e não encoding_base64 nem encodingBase64.
  • JavaScript e TypeScript: não há uma regra única. O guia de JavaScript do Google quer nomes de arquivo todos em minúsculas, com sublinhados ou hifens, e o guia de TypeScript dele usa snake_case. O guia da Airbnb diz que o nome do arquivo deve corresponder à sua exportação padrão, então uma classe CheckBox fica em CheckBox.js. Escolha uma regra por projeto e anote-a.
  • Pacotes npm: nomes de pacotes novos não podem conter letras maiúsculas.

Além do código-fonte: variáveis de ambiente, CSS, HTML, URLs, JSON e SQL

OndeConvençãoExemploPor quê
Variáveis de ambienteSCREAMING_SNAKE_CASEDATABASE_URLCombina com variáveis do sistema, como PATH e HOME. Os nomes diferenciam maiúsculas e minúsculas no Linux e no macOS, mas não no Windows.
Propriedades CSSkebab-casebackground-colorDefinido pela própria linguagem.
Propriedades personalizadas do CSSkebab-case depois de dois hifens--brand-colorDiferenciam maiúsculas e minúsculas, então --Brand-Color seria outra propriedade.
Nomes de classes CSSkebab-case, muitas vezes com BEMcard__title--largeLê-se como as propriedades ao redor.
CSS a partir do JavaScriptcamelCaseel.style.backgroundColorO objeto style expõe os nomes das propriedades em camelCase.
Atributos data do HTMLkebab-casedata-index-numberLidos no JavaScript como dataset.indexNumber.
Caminhos de URLkebab-case em minúsculas/blog/developer-case-stylesO Google recomenda hifens em vez de sublinhados e trata /APPLE e /apple como URLs diferentes.
Chaves JSONNão há padrãouserId ou user_idAcompanhe o consumidor principal e converta na fronteira.
Tabelas e colunas SQLsnake_case em minúsculasorder_itemsFunciona sem aspas em todos os bancos de dados importantes.

Uma peculiaridade das variáveis de ambiente: o POSIX diz que os utilitários padrão usam nomes em maiúsculas e reserva os nomes com letras minúsculas para as aplicações, de modo que um nome em minúsculas nunca colide com um nome padrão. Mesmo assim, as maiúsculas continuam sendo o hábito estabelecido, então nós manteríamos esse hábito e acrescentaríamos um prefixo distintivo (MYAPP_TIMEOUT) para evitar colisões.

As linhas de CSS e de SQL têm cada uma um artigo próprio: veja nomenclatura CSS e BEM para os nomes de classes e convenções de nomenclatura SQL para entender por que os bancos de dados empurram você para as minúsculas.

Siglas: onde os guias de estilo discordam

Todos os guias concordam em userName. Eles se dividem em userID. Os guias de JavaScript e de Java do Google escrevem as siglas em minúsculas, como palavras comuns (xmlHttpRequest, customerId). O Go mantém cada sigla numa única caixa (ServeHTTP, appID). As diretrizes do .NET da Microsoft põem em maiúsculas as duas letras de uma sigla de duas letras (IOStream), mas só a primeira letra das mais longas (HtmlTag). O Rust as trata como palavras (Uuid), e a PEP 8 prefere HTTPServerError a HttpServerError. Comparamos as opções lado a lado em camelCase vs. PascalCase.

Como escolher quando você não tem certeza

  1. Veja se a plataforma decide por você. Os nomes de propriedades CSS, os nomes de arquivo Java, os nomes exportados do Go e os nomes de componentes React (que precisam começar com letra maiúscula) não são escolhas de estilo.
  2. Siga o guia oficial da linguagem. O código novo deve se parecer com a biblioteca padrão ao lado da qual ele fica.
  3. Acompanhe o projeto existente. A PEP 8 diz isso com todas as letras: a consistência dentro de um projeto importa mais do que a consistência com o guia de estilo.
  4. Deixe um linter lembrar por você. A regra camelcase do ESLint, as regras N do Ruff para Python e os avisos embutidos do rustc pegam deslizes antes que um revisor precise fazer isso.
  5. Converta uma vez, na fronteira. Quando um JSON em snake_case encontra um JavaScript em camelCase, renomeie as chaves numa única camada de serialização em vez de deixar os dois estilos vazarem pela base de código.

© 2026 ConvertCaseHQ. Todos os direitos reservados.