请问一个新设计的程序语言,是选择 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 我个人认为,确实好读一些。

希望大家能给出一些建议。
5070 次点击
所在节点    程序员
94 条回复
xieyuheng
2023-09-17 06:43:17 +08:00
我发现,在英文药品的包装上,
还会用到所谓 Tall-Man Letters ,
来强调相似药品名的差异。

https://en.wikipedia.org/wiki/Tall_Man_lettering

比如:

acetaZOLAMIDE vs. acetoHEXAMIDE
buPROPion vs. busPIRone
chlorproMAZINE vs. chlorproPAMIDE
clomiPHENE vs. clomiPRAMINE
cycloSERINE vs. cycloSPORINE
DAUNOrubicin vs. DOXOrubicin
DOBUTamine vs. DOPamine
hydrALAzine vs. hydrOXYzine
TOLAZamide vs. TOLBUTamide
vinBLAStine vs. vinCRIStine
zxCoder
2023-09-17 11:46:11 +08:00
拒绝下划线,拒绝 c/c++
zhanglintc
2023-09-17 12:02:11 +08:00
@Nazz #10 这个怎么讲,为啥跟 GC 还有关系?
liuliuliuliu
2023-09-17 13:19:17 +08:00
@forgottencoast
是的,推荐大家都看看这本书,最近也刚出了第三版
很大一部分内容其实语言无关
《框架设计指南:构建可复用.NET 库的约定、惯例与模式(第 3 版)》
https://book.douban.com/subject/36308103/
MeteorCat
2023-09-17 13:24:54 +08:00
驼峰在有些版本控制的 window 平台切换下大小写会发现都是奇奇怪怪的
forgottencoast
2023-09-17 14:09:29 +08:00
@nikenidage1
OP 说的这个主题其实和语言无关对吧,你用什么方式来写变量名、类名对编译器来说都是无感的。
这其实就这本书题目中的约定、惯例。
shaoyie
2023-09-17 15:19:50 +08:00
最好是 snake_case
考虑以下因素,能保证整体统一
1. 文件名,包名,路径等
2. 类名,函数名,变量名

如果是 linux 下,你发现 shell ,libc syscall 都是小写为主,比如你在命令行里边找个文件,如果一路按着 shift 过去就很麻烦,文件名是 snake_case 了 包名自然也就是一样的了,
那这样继续推理下去,包名是 snake_case ,代码里边你如果用 camelCase ,岂不是有些乱?

我就不喜欢 google c/c++ code style ,因为 syscall, libc, stl, boost 都是小写的,你项目用 camelCase ,代码看着真丑。不知道咋想的

还有 rust 的风格,也是混杂的
shaoyie
2023-09-17 15:24:18 +08:00
netabare
2023-09-17 15:46:36 +08:00
个人喜好是 camelCase 或者 PascalCase ,不过还是觉得造语言的时候 case 是不重要的事情,这个更多是根据社区的习惯来的吧。

比如说一般来说 C++社区也会有一些特定领域和类库会习惯用 PascalCase 。

(然后印象比较深刻的是 OCaml 社区在类名上用 camel 而不是 Pascal )
Nazz
2023-09-17 16:10:56 +08:00
@zhanglintc 习惯
LK99
2023-09-18 04:56:00 +08:00
@xieyuheng getIphoneUsers? getiPhoneUsers? getIPhoneUsers?
#78
james122333
2023-09-18 06:24:55 +08:00
能的话我会写 snake case 至于按键问题 就是为何要用 vi 类编辑器的原因 绑定插入时的键位 其它命令行状况 bash 也可以绑定键位 甚至可绑定某键位打开编辑器( EDITOR 环境变量)编辑当前命令储存后执行命令 这个在输入多行命令的时后非常好用
james122333
2023-09-18 06:28:01 +08:00
承接以上 还有这是为何 vi 类的要整成秒开的原因 装一堆插件打开很卡
MrSheng
2023-09-18 09:10:22 +08:00
没有中文文档都不知道是做啥的。

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

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

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

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

© 2021 V2EX