alltools.one
Programming
2026-02-25
9 min
alltools.one Team
naming-conventionsprogrammingcamelcasesnake-casecoding-style

编程中的命名约定 — camelCase、snake_case 及更多

你第一次打开一个代码库,在同一个文件中看到了 getUserNameget_user_nameGetUserName。你立刻知道出了问题。命名约定是那些在团队协作之前看似微不足道,但之后变得至关重要的事情之一。

一致的命名不是个人偏好问题。它的目的是让下一个接触代码的人能够读懂它——而那个人通常是六个月后的你自己。

为什么命名约定很重要

当项目缺乏一致的命名时,三件事会崩溃:

  • 可读性下降 — 当变量风格每隔几行就变化一次时,你的大脑会浪费周期来解析格式而不是理解逻辑
  • 团队协作分裂 — Pull request 变成了关于风格而非内容的战场。由于没有可预测的模式,新开发人员的入职需要更长时间
  • 工具无法正常工作 — 代码检查器、自动补全、代码生成器和重构工具都依赖于可预测的命名模式

你选择哪种约定远不如选择一种并坚持下去重要。一个在所有地方都使用一致 snake_case 的代码库比混合三种不同风格的代码库好得多。

命名约定完全指南

camelCase

第一个单词小写,后续每个单词首字母大写。没有分隔符。

// JavaScript / TypeScript
const userName = "Alice";
let itemCount = 42;
function getUserProfile(userId) {
  return fetchData(`/users/${userId}`);
}

使用场景: JavaScript、TypeScript 和 Java 使用 camelCase 作为变量、函数名和方法名。Swift 中也是局部变量和函数参数的默认写法。

PascalCase

每个单词首字母大写。也称为 UpperCamelCase。

// TypeScript / C#
class UserProfile {
  firstName: string;
  lastName: string;
}

interface DatabaseConnection {
  host: string;
  port: number;
}

// React 组件
function NavigationBar({ items }: NavProps) {
  return <nav>{/* ... */}</nav>;
}

使用场景: C# 对几乎所有公共成员使用 PascalCase — 类、方法、属性。TypeScript 和 JavaScript 将其用于类、接口、类型别名和枚举。React 要求组件名使用 PascalCase,因为 JSX 需要区分组件和 HTML 元素。

在 Go 中,PascalCase 具有特殊含义:以大写字母开头的标识符是导出的(公共的)。

snake_case

所有单词小写,用下划线分隔。

# Python
user_name = "Alice"
item_count = 42

def get_user_profile(user_id):
    return fetch_data(f"/users/{user_id}")

class UserProfile:
    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name

使用场景: Python 对几乎所有内容使用 snake_case,类名除外。Ruby 遵循相同的模式。Rust 对变量、函数和模块使用 snake_case。数据库架构几乎普遍使用 snake_case 作为表名和列名。

SCREAMING_SNAKE_CASE

全部大写加下划线。保留给常量和不应更改的值。

// 大多数语言中的常量
const MAX_RETRY_COUNT = 3;
const API_BASE_URL = "https://api.example.com";
const DEFAULT_TIMEOUT_MS = 5000;

使用场景: 几乎所有语言都使用 SCREAMING_SNAKE_CASE 作为常量。全大写格式是一个通用信号,表示"不要重新赋值"。

kebab-case

全部小写,用连字符作为分隔符。

/* CSS 类名 */
.navigation-bar {
  background-color: #1a1a2e;
}

.user-profile-card {
  border-radius: 8px;
}
# CLI 标志
npm install --save-dev eslint
git commit --no-verify

使用场景: CSS 和 HTML 强烈倾向于 kebab-case。URL slug 使用它。CLI 工具和命令行标志也遵循它。

大多数编程语言中不能将 kebab-case 用于变量名,因为连字符会被解释为减号运算符。

dot.case

用点分隔单词。

// Java 包名
package com.example.userservice.controllers;

import org.springframework.boot.SpringApplication;

使用场景: Java 包命名、文件扩展名、Spring Boot 等框架中的配置属性键。

Title Case

每个主要单词大写。"and"、"the"、"of"等次要单词除非在短语开头,否则保持小写。

使用场景: UI 标题、页面标题、菜单项、文档部分和专有名词。

path/case

用斜杠分隔单词,遵循文件系统或命名空间约定。

使用场景: 文件系统路径、模块路径、命名空间层次和 URL 路由结构。

各语言约定对照表

语言变量 / 函数类 / 类型常量文件
JavaScript / TypeScriptcamelCasePascalCaseSCREAMING_SNAKE_CASEkebab-case 或 camelCase
Pythonsnake_casePascalCaseSCREAMING_SNAKE_CASEsnake_case
GocamelCase(未导出)PascalCase(已导出)PascalCase 或 ALL_CAPSsnake_case
Rustsnake_casePascalCaseSCREAMING_SNAKE_CASEsnake_case
JavacamelCasePascalCaseSCREAMING_SNAKE_CASEPascalCase
C#camelCase(私有)PascalCase(公共)PascalCasePascalCase
Rubysnake_casePascalCaseSCREAMING_SNAKE_CASEsnake_case
CSSkebab-casekebab-case
SQLsnake_case(列)大写(关键字)snake_case
PHPcamelCasePascalCaseSCREAMING_SNAKE_CASEPascalCase

常见错误及修复方法

1. 在同一作用域中混合约定

// ❌ 不一致
const user_name = "Alice";
const itemCount = 42;
const MaxRetries = 3;

// ✅ 一致的 camelCase
const userName = "Alice";
const itemCount = 42;
const maxRetries = 3;

2. 对语言使用错误的约定

# ❌ 在 Python 中使用 camelCase
def getUserProfile(userId):
    userName = fetchUser(userId)
    return userName

# ✅ 使用 Python 期望的 snake_case
def get_user_profile(user_id):
    user_name = fetch_user(user_id)
    return user_name

3. 缩写和首字母缩略词

// ❌ 首字母缩略词处理不一致
const XMLParser = new XmlParser();
const htmlToJSON = convert(HTMLString);

// ✅ 将首字母缩略词视为单词
const xmlParser = new XmlParser();
const htmlToJson = convert(htmlString);

4. 布尔值名称没有 is/has/can 前缀

// ❌ 歧义的布尔值
const active = true;

// ✅ 明确的布尔值意图
const isActive = true;

约定间的自动转换

当你在不同语言之间工作时,手动转换命名约定既繁琐又容易出错。

我们的字符串大小写转换器可以自动处理这个问题。粘贴任何标识符,一键在 camelCase、PascalCase、snake_case、kebab-case 等之间转换。

延伸阅读


准备好自动转换命名约定了吗? 试试我们的字符串大小写转换器 — 粘贴任何标识符,在 camelCase、snake_case、PascalCase、kebab-case 等之间转换。无需注册,不向服务器发送数据,完全免费。

Published on 2026-02-25
Naming Conventions — camelCase, snake_case Guide | alltools.one