文本和日常工具·文本工具包
camelCase、snake_case、kebab-case 和 PascalCase:分别使用的情况
· 背景
大小写转换 标识符 开发人员工作流程
命名约定概览 - 它们来自哪里、哪些语言和生态系统期望哪些、以及为什么文件名、URL、数据库列和 JSON 键各自朝着不同的方向发展。
一件事有五个名称 — userProfileId、user_profile_id、user-profile-id、UserProfileId 和 USER_PROFILE_ID
短语“用户配置文件 ID”可以变为 `userProfileId`、`UserProfileId`、`user_profile_id` 或 `user-profile-id`,而无需更改其单词。明显的区别在于边界出现的位置以及第一个单词是否以大写开头。 ToolAcre 直接从相同的输入生成这四种形式,使它们的结构差异易于比较。
全大写的 `USER_PROFILE_ID` 是另一个有用的项目约定,但它不是大小写转换器源中的单独组合选项。该工具包独立地公开蛇形大小写和大写转换。如果代码库使用大写常量,请转换为蛇形命名法,然后将其大写,而不是声称大小写菜单同时执行这两个步骤。
Text Toolkit演示的四种转换,加上单独组装的大写常量形式
`camelCase` 以小写单词开头,并将后面每个单词的开头大写。 `PascalCase` 应用相同的连接词形状,同时也将第一个单词大写。在 ToolAcre 中,两种转换都以相同的分词器开始,因此在组装输出之前会解释标点符号和现有的大小写边界。
许多团队将这两种形式分配给不同类型的名称,但存储库没有建立通用语言规则或该拆分的历史记录。将本地风格指南、linter、框架 API 或附近的代码视为权威。转换器改变拼写形状;它无法确定名称是否代表类、函数、变量或组件。
驼峰命名法和帕斯卡命名法的第一个字母不同;他们的语言历史不在存储库证据之内
`snake_case` 降低每个检测到的单词并用下划线连接结果。对于 `User Profile ID`,ToolAcre 返回 `user_profile_id`。分隔符保持可见,当名称通过不能可靠地保留大写的系统时,这会有所帮助,但实际的好处并不能证明每个数据库、语言或服务都需要下划线。
使用目的地已定义的约定。 Python 服务可能有一个策略,另一个 SQL 模式,以及第三个序列化负载。 ToolAcre 无法检查这些合同。它的可靠承诺范围更窄: `toSnakeCase` 检测单词,将每个单词小写,然后在它们之间插入 `_` ,而不决定目的地是否允许或更喜欢该结果。
Snake_case输出;生态系统和 SQL 期望取决于每个项目
`kebab-case` 使用相同的小写单词,但用连字符将它们连接起来,生成 `user-profile-id`。在连字符被接受为数据的地方,例如配置的路线段或项目定义的文件名,该形状在视觉上是清晰的。它不是 JavaScript 标识符,因为解析器可以将连字符读取为运算符而不是名称的一部分。
该大纲列出了 CSS 类、HTML 属性、命令行标志和 URL slug,但文本库并未定义这些使用者的规则。转换前确认目标语法。 ToolAcre 还有一个单独的 `slugify` 函数,具有重音折叠、分隔符选择、修剪和可选长度处理,因此普通的 kebab 转换不应呈现为完整的 URL-slug 验证。
kebab-case 输出;有效的使用取决于周围的语法
边界是命名约定变得可操作而不是装饰的地方。浏览器对象可以使用一种拼写,而 API 负载或数据库列则使用另一种拼写。在一个适配器上明确映射,而不是在视图、查询和业务逻辑之间分散转换。可预测的边缘使每个内部模型保持一致,并使不匹配更容易定位。
避免仅仅因为任意值看起来像标识符而转换它们。分词器将标点符号视为边界,并识别小写、大写和数字之间选定的转换。这对于名称很有用,但它可以改变拼写在外部固定的键。准确保留合约密钥,除非接收接口记录了您控制下的映射。
工作示例 — 通过所有约定转换一个标识符并确定哪个标识符属于小项目中的哪个位置
考虑一个带有短语 `user profile ID` 的小型应用程序。 ToolAcre 为camel 情况生成`userProfileId`,为Pascal 情况生成`UserProfileId`,为snake 情况生成`user_profile_id`,为kebab 情况生成`user-profile-id`。每个输出都携带相同的三个检测到的单词,而大写和插入的分隔符对所选形状进行编码。
实际项目可能会将 `userProfileId` 保留在 JavaScript 对象中,将其显式映射到持久边界处的 `user_profile_id`,并为语法接受连字符的位置保留 `user-profile-id`。确切的选择属于该项目。重要的部分是记录每个边界并测试映射,而不是根据外观反复猜测。
这不包括什么——匈牙利表示法和关于标识符内缩写的争论
此比较不会解决缩写拼写问题。该实现在重建之前将检测到的单词转换为小写部分,因此包含 `HTTP` 的输入可能会在 Pascal 或 Camel 输出中显示为 `Http` 。团队是否更喜欢 `Http`、`HTTP`、`Id` 还是 `ID` 是一种命名策略,需要在这些常规转换之外有一个显式例外。
它也不涵盖符号历史、语言标准或每个有效的标识符语法。这些声明需要的来源超出了本文使用的工具文件。 ToolAcre 演示了确定性文本转换并记录了一个关键限制:没有任何可检测边界的书面复合词并不总是能被分割成人们想要的单词。
缩写策略和符号历史记录位于转换器证据之外
没有一种情况是普遍正确的。当名称遵循合同并且仍然可以被维护该层的人员识别时,它是有用的。从已经存在的约定开始,将一种形式保留在边界内,并仅在另一个界面需要它的地方进行翻译。一致性减少了偶然的差异,而不假装每个生态系统都共享一个规则。
当边界确实需要另一种形状时,请将标识符粘贴到文本工具包大小写转换器中,并在应用一个之前检查四个输出。该操作在浏览器中运行,并且清单声明文本不会发送到服务器或自动保存。使用结果作为深思熟虑的映射,然后让项目测试和本地样式检查确认最终选择。