请问一个新设计的程序语言,是选择 camelCase 好,还是先择 snake_case 好?

2023-09-16 12:16:12 +08:00
 xieyuheng
大家可能要笑了,这也算问题?

但是其实我是很严肃地在考虑这个问题的。
因为尽管在写代码的时候,用户可以做出选择,
但在语言的文档和标准库中,还是要选择一种命名规范的。
而做这种选择对我来说是很艰难的。

我说的 “新设计的程序语言” 具体是这个: https://github.com/cicada-lang/inet

我刚刚用一个 commit 把 snake_case 改成了 camelCase:

https://github.com/cicada-lang/inet/commit/7625a8ad5f87da1ab9c4fd231fc8142ca8900d79

但是我不确定这样做是 “正确的”。

我能想到的,选择 camelCase 的理由:

( 1 )语言已经选择使用 BigCamelCase 作为类型的命名规则了,比如 `DiffList`,
此时如何想要一个变量,直接在这个类型名字前面加上变量的前缀就好了,比如 `emptyDiffList`,
如果用 snake_case ,就需要编辑类型名,而写成 `empty_diff_list`。

( 2 )这个语言目前是用 JavaScript/TypeScript 实现的,而 JavaScript 用的是 camelCase 。
并且未来想要用 Zig 再实现一遍,而 Zig 用的也是 camelCase 。

我能想到的,选择 snake_case 的理由:

( 1 ) snake_case 我个人认为,确实好读一些。

希望大家能给出一些建议。
5069 次点击
所在节点    程序员
94 条回复
hronro
2023-09-16 18:06:15 +08:00
zig 也不是 camelCase ,而是两种命名混用:普通变量用 snake_case ,类型、函数之类的用 CamelCase 。
liberize
2023-09-16 18:34:19 +08:00
现在用 camelCase 的投 snake_case 一票,类名也可以同样 snake_case ,参考 c++ stl
Leviathann
2023-09-16 18:58:56 +08:00
@yazinnnn 烤串 kebab
forgottencoast
2023-09-16 19:28:39 +08:00
@ye4241 44#
C#里面你说的这个缩写词规范(《框架设计指南》)里面也是有涉及到的。
除了几个特别约定的,比如 Id ,其它都是全大写,比如 URL 。
iorilu
2023-09-16 19:43:01 +08:00
不是什么样式问题

关键大小写要统一

普通变量全小写

常量全大写

就这么简单

所以还是 snake case ,python 这种风格更合理
Jakarta
2023-09-16 20:01:05 +08:00
@dcsuibian 因为 opencv 是写 cpp 的人写的
magicdawn
2023-09-16 20:09:42 +08:00
snake_case 确实易读性强一点
AItsuki
2023-09-16 21:52:03 +08:00
snake_case 不二之选
zhangxzh
2023-09-16 22:12:28 +08:00
有些语言没有大小写, 像中文, 这么说可能有人也会笑, 但我有时也用中文写代码, 表达更清楚, 这时下划线就很好.

另外为什么不能是 'A-A' 或其他的连词形式呢, 毕竟下划线要多按一个 shift
Torpedo
2023-09-16 22:22:42 +08:00
snake_case 有点丑。但是比驼峰实用。
SHF
2023-09-16 22:48:44 +08:00
我喜欢 snake_case ,驼峰字母高高低低太恶心了
Tanix2
2023-09-17 00:00:27 +08:00
选 snake_case ,易读性好太多。至于有人说输入下划线比较麻烦,我的想法是,变量的命名通常只需要第一次打全,之后都是自动补全,所以并不会有太大差别。并且写熟悉后,用下划线会觉得很有节奏感,因为下划线就像平时打英文句子的空格一样。
AyanamiAsuka
2023-09-17 00:13:57 +08:00
一个好读一个好写,我大部分时间在读代码,所以我希望大家都用 snake_case
n1cogrv
2023-09-17 00:55:09 +08:00
@yazinnnn #59
@usedTo404 #7

微软的想象? M$要把 PowerShell 里面用 "-" 分割的尿性带到他们家别的编程语言上,我感觉那才叫末日...
snake_case.replace("_", "-").toPascalCase() -> Powershell-Case

用"-"分隔的叫 Kebab Case ,但是人家是纯小写的(e.g., kebab-case)。混上 PascalCase ,恕我孤陋寡闻,PowerShell 算是独一份。每次打这玩意我都血压拉满。
ooops
2023-09-17 02:37:03 +08:00
@xieyuheng 商标这种不能分开,不分开的情况下也还行。youtube github iphone ebay ipad
xieyuheng
2023-09-17 06:26:11 +08:00
@ooops 对的,机会没有商标和域名会用下划线。
xieyuheng
2023-09-17 06:26:54 +08:00
* 机会/几乎
xieyuheng
2023-09-17 06:33:52 +08:00
@rekulas

> 至于大小写问题感觉还好,有些词是固定大小写的,就应该按它本身的来书写
> 比如 getPHPUsers 而不是 getPhpUsers

这个很有道理,感觉解决了我的选择困难。

而且你说的这个在 Scala 的命名规范中也有提到:

https://docs.scala-lang.org/style/naming-conventions.html

英雄所见略同了,属于是。
xieyuheng
2023-09-17 06:36:28 +08:00
啊不对,你这个刚好的 Scala 相反,哈哈哈,不好意思我看错了。

Scala 说的是 “Acronyms should be treated as normal words”

看来命名规则这个领域,还是真是分仁者见仁智者见智。
xieyuheng
2023-09-17 06:39:48 +08:00
@libook

> 用驼峰的话,大写只是为了断词所以可以统一规定缩写也一律按照首字母大写其他字母小写的规则。

是这条回复和 Scala 的一样,
同时又说出了为什么,
因为大写只是为了断词。

而 Scala 只是说“Acronyms should be treated as normal words”

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/974361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX