编程命名规范:camelCase、snake_case、PascalCase 及更多
编程命名规范完整指南。学习何时使用 camelCase(驼峰命名法)、snake_case(蛇形命名法)、PascalCase(大驼峰命名法)、kebab-case(短横线命名法)和 CONSTANT_CASE(常量命名法),涵盖 JavaScript、Python、Go、Java、CSS 等语言的具体规则。
编程命名规范:camelCase、snake_case、PascalCase 及更多
命名规范是每位开发者必须掌握的基础知识之一,也是代码库中不一致现象最常见的来源之一。使用错误的命名风格不会导致语法错误,但会让有经验的开发者感到你对该语言惯用法不够熟悉,从而降低代码的可读性。
本指南涵盖所有主流命名规范、各自的适用场景,以及 10 种编程语言的具体规则。使用我们免费的大小写转换工具,可在所有这些格式之间即时转换文本。
主要命名规范
camelCase(驼峰命名法)
规则:第一个单词小写,后续单词首字母大写,单词之间无分隔符。
myVariableName
calculateTotalPrice
getUserById
isAuthenticated
适用场景:JavaScript/TypeScript 的变量和函数、Java 的变量和方法、JSON 属性名、Swift 的变量和函数。
名称由来:单词中间的大写字母形似骆驼的驼峰,故称 camelCase。
PascalCase(大驼峰命名法,又称 UpperCamelCase)
规则:每个单词首字母均大写(包括第一个单词),单词之间无分隔符。
MyClassName
UserProfile
HttpRequestHandler
DatabaseConnection
适用场景:几乎所有语言中的类名、React/Vue/Angular 组件名、TypeScript 接口和类型、C# 的所有命名(方法、属性、类)。
与 camelCase 的关键区别:首字母大写。myFunction(camelCase)vs MyFunction(PascalCase)。
snake_case(蛇形命名法)
规则:全部小写,单词之间用下划线分隔。
my_variable_name
calculate_total_price
get_user_by_id
is_authenticated
适用场景:Python 的变量、函数和模块名(遵循 PEP 8)、Ruby 的变量和方法、Rust 的变量和函数、数据库的列名和表名、许多项目中的文件名。
SCREAMING_SNAKE_CASE(尖叫蛇形命名法,又称 CONSTANT_CASE)
规则:全部大写,单词之间用下划线分隔。
MAX_RETRY_COUNT
DATABASE_URL
API_BASE_URL
DEFAULT_TIMEOUT_MS
适用场景:大多数语言中的常量、环境变量、C/C++ 预处理器宏、Java 的静态 final 字段。
kebab-case(短横线命名法,又称 dash-case)
规则:全部小写,单词之间用连字符(短横线)分隔。
my-component-name
user-profile-card
border-bottom-color
my-awesome-package
适用场景:CSS 类名和属性、HTML 属性(data-*)、URL 别名(slug)、npm 包名、许多框架中的文件名、Lisp/Clojure 函数名。
注意:kebab-case 不能用于大多数编程语言的变量名,因为连字符会被解析为减法运算符。
dot.case(点分命名法)
规则:全部小写,单词之间用点号分隔。
com.example.myapp
log.level.debug
spring.datasource.url
适用场景:Java 包名、配置键(Spring Boot、.properties 文件)、C# 命名空间、域名。
Train-Case(列车命名法,又称 HTTP-Header-Case)
规则:每个单词首字母大写,单词之间用连字符分隔。
Content-Type
X-Request-Id
Accept-Language
Cache-Control
适用场景:HTTP 头部、MIME 类型。这是唯一一种在使用连字符的同时对单词首字母大写的常见命名规范。
各语言具体规则
JavaScript / TypeScript
| 元素 | 规范 | 示例 |
|---|---|---|
| 变量 | camelCase | let userName = "John" |
| 函数 | camelCase | function getUserData() |
| 类 | PascalCase | class UserProfile |
| 接口(TS) | PascalCase | interface ApiResponse |
| 类型别名(TS) | PascalCase | type UserId = string |
| 常量 | CONSTANT_CASE | const MAX_RETRIES = 3 |
| 枚举成员(TS) | PascalCase | enum Color { Red, Blue } |
| React 组件 | PascalCase | function UserCard() |
| CSS 模块 | camelCase | styles.headerContainer |
| 文件名 | kebab-case 或 camelCase | user-profile.ts |
| npm 包 | kebab-case | my-awesome-lib |
Python
| 元素 | 规范 | 示例 |
|---|---|---|
| 变量 | snake_case | user_name = "John" |
| 函数 | snake_case | def get_user_data(): |
| 类 | PascalCase | class UserProfile: |
| 常量 | CONSTANT_CASE | MAX_RETRIES = 3 |
| 模块 | snake_case | import user_utils |
| 包 | 纯小写(无分隔符) | import mypackage |
| 私有成员 | 单前导下划线 | self._internal_data |
| 名称改写 | 双前导下划线 | self.__private_var |
| 魔术方法 | 双侧双下划线 | def __init__(self): |
Python 的命名规范定义于 PEP 8,是被普遍接受的风格指南。
Java
| 元素 | 规范 | 示例 |
|---|---|---|
| 变量 | camelCase | String userName |
| 方法 | camelCase | getUserData() |
| 类 | PascalCase | class UserProfile |
| 接口 | PascalCase | interface Serializable |
| 常量 | CONSTANT_CASE | static final int MAX_RETRIES |
| 包 | 小写点分隔 | com.example.myapp |
| 枚举值 | CONSTANT_CASE | enum Status { ACTIVE, INACTIVE } |
Go
| 元素 | 规范 | 示例 |
|---|---|---|
| 导出(公有) | PascalCase | func GetUser()、type Config struct |
| 未导出(私有) | camelCase | func parseInput()、var count int |
| 常量 | PascalCase 或 camelCase | const MaxRetries = 3 |
| 包 | 纯小写(单个单词) | package http |
| 接口 | PascalCase + -er 后缀 | type Reader interface |
| 缩写词 | 全大写 | userID、httpURL、sqlDB |
Go 使用大小写来控制可见性——导出的标识符以大写字母开头,未导出的以小写字母开头。这由编译器强制执行,而不仅仅是约定。
CSS
| 元素 | 规范 | 示例 |
|---|---|---|
| 属性 | kebab-case | background-color: red |
| 类名 | kebab-case | .user-profile-card |
| BEM 表示法 | block__element--modifier | .card__title--active |
| CSS 自定义属性 | 带 -- 前缀的 kebab-case | --primary-color: blue |
| Sass 变量 | 带 $ 的 kebab-case | $font-size-large |
| Tailwind 类 | kebab-case | text-sm、bg-blue-500 |
Rust
| 元素 | 规范 | 示例 |
|---|---|---|
| 变量 | snake_case | let user_name = "John" |
| 函数 | snake_case | fn get_user_data() |
| 结构体/枚举 | PascalCase | struct UserProfile |
| 常量 | SCREAMING_SNAKE_CASE | const MAX_RETRIES: u32 = 3 |
| 模块 | snake_case | mod user_utils |
| Trait(特征) | PascalCase | trait Serialize |
| Crate 名称 | kebab-case(Cargo.toml)/ snake_case(代码) | my-crate / my_crate |
SQL
| 元素 | 规范 | 示例 |
|---|---|---|
| 关键字 | 大写 | SELECT、FROM、WHERE |
| 表名 | snake_case(单数或复数均可) | user_profile 或 user_profiles |
| 列名 | snake_case | first_name、created_at |
| 索引 | ix_ 前缀 | ix_users_email |
| 外键 | fk_ 前缀 | fk_orders_user_id |
常见转换场景
跨语言或跨系统工作时,经常需要在不同命名规范之间转换:
| 从 → 到 | 适用场景 |
|---|---|
| camelCase → kebab-case | JS 属性 → CSS 类名 |
| camelCase → snake_case | JS/Java → Python/Ruby/数据库 |
| snake_case → camelCase | 数据库/API → JavaScript |
| PascalCase → kebab-case | 组件名 → 文件名 |
| kebab-case → camelCase | CSS 属性 → JS 样式属性 |
| CONSTANT_CASE → camelCase | 环境变量 → 配置对象 |
示例:一个 JSON API 可能返回 user_name(snake_case),但你的 JavaScript 代码使用 userName(camelCase),CSS 使用 .user-name(kebab-case),React 组件是 UserName(PascalCase)——它们表示的是同一个概念。
使用我们的大小写转换工具,无需手动重新输入即可在所有这些格式之间即时转换。
缩写词与缩略词
各语言处理标识符中缩写词的方式不同:
| 语言 | 规则 | 示例 |
|---|---|---|
| JavaScript | 仅首字母大写 | userId、htmlParser、apiUrl |
| Go | 保持全大写 | userID、htmlParser、apiURL |
| C# | 两字母缩写全大写;三字母及以上用 PascalCase | IOStream、HtmlParser |
| Java | 仅首字母大写 | userId、httpUrl |
| Python | 在 snake_case 中保持小写 | user_id、html_parser、api_url |
缩写词的处理方式是命名风格中争议最多的问题之一。最重要的是在项目内部保持一致性。
文件命名规范
| 语言/框架 | 规范 | 示例 |
|---|---|---|
| JavaScript/TypeScript | kebab-case 或 camelCase | user-profile.ts、userProfile.ts |
| React 组件 | PascalCase | UserProfile.tsx |
| Python | snake_case | user_profile.py |
| Java | PascalCase(与类名一致) | UserProfile.java |
| Go | 纯小写 | userprofile.go |
| CSS/SCSS | kebab-case | user-profile.css |
| 测试文件 | 同名 + .test/.spec | user-profile.test.ts |
风格指南参考
| 语言 | 官方风格指南 |
|---|---|
| Python | PEP 8 |
| JavaScript | Airbnb / Google / StandardJS |
| TypeScript | Google TypeScript Style Guide |
| Java | Google Java Style Guide |
| Go | Effective Go(由 gofmt 强制执行) |
| Rust | Rust API Guidelines |
| C# | .NET Naming Guidelines |
| Swift | Swift API Design Guidelines |
| Ruby | Ruby Style Guide |
| PHP | PSR-12 |
常见问题
命名规范会影响代码执行吗?
在大多数语言中不会——myVar 和 my_var 都是合法的。例外是 Go:大小写决定可见性,MyFunc 是导出的(公有),myFunc 是未导出的(私有)。在 CSS 中,类名区分大小写,.MyClass 和 .myclass 是不同的选择器。
哪种命名规范「最好」?
没有普遍最佳的规范。应遵循所用语言的既定惯例。在 JavaScript 中使用 snake_case 或在 Python 中使用 camelCase 虽然能运行,但会让其他开发者感到困惑,并违背社区预期。在项目内部保持一致性比选择哪种规范更重要。
代码检查工具如何强制执行命名规范?
ESLint(JavaScript)有 camelcase 规则;Pylint(Python)强制执行 PEP 8 命名;RuboCop(Ruby)检查命名风格;Go 编译器通过大小写强制执行导出规则。大多数代码检查工具都可以配置,以满足项目的具体命名要求。
需要在命名规范之间转换文本?使用我们的大小写转换工具,可在 camelCase、snake_case、PascalCase、kebab-case 等格式之间即时转换。如需统计代码中的字符数和单词数,可以试试我们的字数统计工具。