← 博客 · · ConvertCaseHQ 团队 · 阅读约需 6 分钟

camelCase、snake_case、kebab-case:各编程语言命名规范速查表

先说结论。类型和类在几乎所有语言中都用 PascalCase(帕斯卡命名)。变量和函数在 JavaScript、Java、C#、Kotlin 和 Swift 中用 camelCase(驼峰命名),在 Python、Ruby 和 Rust 中则用 snake_case(下划线命名)。常量在大多数语言中用 SCREAMING_SNAKE_CASE,Go、Swift、C# 和 Google 风格的 C++ 是例外。凡是会出现在 URL、CSS 文件或包名里的东西,通常用小写的 kebab-case(短横线命名),而环境变量则是用下划线连接的大写字母。

大体规律就是这样。但代码评审里争论的往往是细节,所以这份速查表只讲各语言的官方风格指南(或使用最广的风格指南)实际上是怎么规定的,并为每种语言注明出处。

camelCase、snake_case、kebab-case:五种风格及其别名

  • camelCase(orderTotal):第一个单词小写,后面每个单词首字母大写。也叫 lowerCamelCase;PEP 8 称之为 mixedCase。
  • PascalCase(OrderTotal):每个单词首字母都大写。也叫 UpperCamelCase、CapWords(PEP 8)或 StudlyCaps(PHP 的 PSR-1)。
  • snake_case(order_total):小写单词,用下划线连接。
  • SCREAMING_SNAKE_CASE(ORDER_TOTAL):大写单词,用下划线连接。Google 的 JavaScript 指南称之为 CONSTANT_CASE,Java 指南则称之为 UPPER_SNAKE_CASE。
  • kebab-case(order-total):小写单词,用连字符连接。大多数语言不能把它用作标识符,因为连字符就是减号。

要在不同风格之间转换一个名称,把它粘贴到我们的大小写转换器中即可。它会在空格、下划线、连字符和已有的大写字母处拆分单词,所以 order_total、order-total 和 OrderTotal 都能干净利落地互相转换。不过请一次只转换一个名称:它会把框中的全部内容当作一个标识符。

速查表:各语言的命名规范

语言变量和函数类和类型常量出处
JavaScript、TypeScriptcamelCasePascalCase永不改变的模块级值用 CONSTANT_CASEGoogle 的 JavaScript 和 TypeScript 风格指南
JavacamelCasePascalCase深度不可变的 static final 字段用 UPPER_SNAKE_CASEGoogle Java Style Guide
KotlincamelCasePascalCaseconst 以及深度不可变的顶层值或 object 值用 SCREAMING_SNAKE_CASEKotlin 编码规范
C#局部变量和参数用 camelCase,私有字段用 _camelCase,方法和公共成员用 PascalCasePascalCase,接口加 I 前缀(IWorkerQueue)PascalCaseMicrosoft .NET 文档
SwiftcamelCasePascalCasecamelCaseSwift API Design Guidelines
Go不导出时用 camelCase,导出时用 PascalCase同一规则同样用 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)
PHP方法用 camelCase;属性由你自己决定PascalCase(StudlyCaps)类常量用 UPPER_SNAKE_CASEPSR-1
C++变量用 snake_case,函数用 PascalCasePascalCasekDaysInAWeekGoogle C++ Style Guide(多种规范之一)

有几行需要加个注脚。在 Go 中,首字母根本不是风格选择,而是可见性规则:Area 会从所在的包中导出,area 则不会,这由编译器强制执行。C++ 没有全语言统一的规范;标准库本身用的是 snake_case(std::unordered_map、push_back),所以请把 Google 那一行看作一个有完善文档的选项,而不是唯一的规则。

Rust 对风格的要求格外严格。编译器默认就会发出警告:如果你写 fn GetUser() 或 struct user_account,还没运行 linter,rustc 就会建议你改成 get_user 和 UserAccount。

文件名、模块名和包名

  • Java:公共顶层类必须放在与类名完全相同(包括大小写)的文件中。OrderService 要放在 OrderService.java 里,换成别的名称都会被 javac 拒绝。
  • Kotlin:只包含一个类的文件以该类命名。其他文件使用描述性的 UpperCamelCase 名称,例如 ProcessDeclarations.kt。
  • Python:模块名应简短、全部小写,如果有助于可读性,可以使用下划线。包名也应简短、小写,PEP 8 不鼓励在包名中使用下划线。
  • Ruby:文件名用 snake_case,以其中的类命名,所以 HelloWorld 放在 hello_world.rb 中。
  • Go:包名是小写的单个单词,不用下划线,也不用 mixedCaps:写 base64,而不是 encoding_base64 或 encodingBase64。
  • JavaScript 和 TypeScript:没有统一的规则。Google 的 JavaScript 指南要求文件名全部小写,可以带下划线或短横线;它的 TypeScript 指南则用 snake_case。Airbnb 的指南规定文件名应与默认导出一致,所以 CheckBox 类放在 CheckBox.js 中。每个项目选定一种,并把它写下来。
  • npm 包:新的包名完全不能包含大写字母。

源代码之外:环境变量、CSS、HTML、URL、JSON 和 SQL

位置规范示例原因
环境变量SCREAMING_SNAKE_CASEDATABASE_URL与 PATH、HOME 等系统变量保持一致。在 Linux 和 macOS 上名称区分大小写,在 Windows 上不区分。
CSS 属性kebab-casebackground-color由语言本身规定。
CSS 自定义属性两个短横线后接 kebab-case--brand-color区分大小写,所以 --Brand-Color 会是另一个属性。
CSS 类名kebab-case,常与 BEM 搭配card__title--large与周围的属性读起来风格一致。
JavaScript 中的 CSScamelCaseel.style.backgroundColorstyle 对象以 camelCase 形式提供属性名。
HTML data 属性kebab-casedata-index-number在 JavaScript 中读作 dataset.indexNumber。
URL 路径小写 kebab-case/blog/developer-case-stylesGoogle 建议用连字符而不是下划线,并把 /APPLE 和 /apple 视为不同的 URL。
JSON 键没有标准userId 或 user_id与主要使用方保持一致,在边界处转换。
SQL 表和列小写 snake_caseorder_items在所有主流数据库中都无需加引号即可使用。

环境变量有个小怪癖:POSIX 规定标准工具使用大写名称,并把含有小写字母的名称留给应用程序使用,所以小写名称永远不会和标准变量冲突。不过大写仍是约定俗成的习惯,所以我们会继续用大写,转而加一个有辨识度的前缀(MYAPP_TIMEOUT)来避免冲突。

CSS 和 SQL 这两行各有专门的文章:类名请看 CSS 命名与 BEM,数据库为什么会把你推向小写,请看 SQL 命名规范。

缩写:风格指南的分歧所在

所有指南在 userName 上意见一致,到了 userID 就各执一词。Google 的 JavaScript 和 Java 指南像对待普通单词一样把缩写转为小写(xmlHttpRequest、customerId)。Go 让每个缩写保持同一种大小写(ServeHTTP、appID)。Microsoft 的 .NET 准则对两个字母的缩写两个字母都大写(IOStream),更长的缩写则只大写首字母(HtmlTag)。Rust 把缩写当作单词处理(Uuid),而 PEP 8 更倾向于 HTTPServerError,而不是 HttpServerError。我们在 camelCase 与 PascalCase 对比一文中把这些做法放在一起做了比较。

拿不准时怎么选

  1. 先看平台是否已经替你决定了。CSS 属性名、Java 文件名、Go 的导出名称,以及 React 组件名(必须以大写字母开头),都不是风格选择的问题。
  2. 遵循该语言的官方指南。新代码应该和它所搭配的标准库看起来是一个样子。
  3. 与现有项目保持一致。PEP 8 说得很直白:项目内部的一致性比与风格指南的一致性更重要。
  4. 让 linter 替你记住。ESLint 的 camelcase 规则、Python 的 Ruff N 规则以及 rustc 的内置警告,会在评审者开口之前就发现疏漏。
  5. 只在边界处转换一次。当 snake_case 的 JSON 遇上 camelCase 的 JavaScript 时,在一个序列化层中统一重命名键,而不是让两种风格渗透到整个代码库里。

© 2026 ConvertCaseHQ. 保留所有权利。