2024年Clojure现状调查!中分享您的想法。

欢迎!请访问关于页面以了解更多关于此功能的信息。

+17
关于语法和读取器
编辑于

我刚看到,Go 1.13 支持了这个功能

数字分隔符:现在可以通过下划线(分组)分隔(任何数字字面量的数字,例如 1_000_000,0b_1010_0110 或 3.1415_9265)。下划线可以出现在任意两个数字之间,或者字面量前缀和第一个数字之间。

我觉得这是一个非常棒的功能。在编写大数字(如 92347683)时,如果这些数字代表百万、十亿等,阅读和理解可能会有困难。为分离添加一种语法,我认为这将是对读取器的很好的补充。这不必是下划线,并且可能需要一些缓冲时间来考虑所有有效的Clojure数字字面量。

谢谢

4 答案

+1

反对这个功能的观点可能是它会影响到代码的搜索。例如,如果你想在代码中搜索数字10000的位置,你可能需要同时搜索10_100以及100_00等。

不确定这是否是一个决定性因素,记不清我上次在代码库中搜索数字是什么时候,但仍然值得关注。

这从Java 7开始就是真的了,因为Java 7增加了下划线作为分隔符,我相信是这样的

https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
与此类似的反对意见之一,是增加原始字符串时提出的,这种做法也可能使工具变得复杂,可能只带来微小的收益。任何使解析更困难,并且有许多边缘情况的任何事物都可能影响工具。
>它可能会影响对代码的搜索。

告诉它 ::namespaced/keyword 语法和命名空间映射。当然,这确实使数字字面量更难查找,但Clojure本身就不易查找。
+1

如果Clojure读者编写时存在这种机制,我认为我们很可能为了兼容性而支持它。但现在我认为您必须权衡增加的实用性益处(在我看来,相当小)与“更新Clojure工具生态系统中的每个reader/parser”的庞大工作量。

0 投票

编辑

这样做似乎是为了让数字更容易被人类解析,所以我觉得这更像是编辑器中的一个功能,而不是语言本身的功能

将这样的变化添加到语言中,会使数字的语法更加复杂,使得所有工具都需要做双倍的工作才能正确处理。因此,这会影响编辑器、语言服务器、格式化工具、linters 等等。所以,这不是仅仅局限于 Clojure reader 的变化。

一旦添加,代码库可能会很快变成多种风格的混合,这会增加开发者和管理员决定使用哪种数字格式的时间,并增加困惑和挫折感。

已经有一些编辑器功能可以显示带花哨符号的 lambda 函数和部分函数。
许多编辑器也对十六进制颜色代码进行了着色。
所有这些都无需修改底层语言

作为编辑器功能的好处是,可以根据需要选择使用哪种分隔符进行配置,例如 _ 或 .,逗号和点对于货币值非常有用。

不改变底层语言,那么搜索和使用其他文本工具的能力不会受到影响。

我宁愿不把这个特性包括在语言中,并鼓励那些发现它有用的人联系他们使用的编辑器维护者。

> 这个理由似乎是让数字更容易被人类解析,所以对我来说,这更像是一个编辑器的特性,而不是语言特性

通过将其推送到编辑器,你现在需要执行与人们所使用的编辑器数量相同的工作,此外还使得在纯文本中(如补丁或 diff 中)阅读代码变得难以访问。通过将特性添加到语言本身,你可以完全绕过所有额外的工作,为所有人提供一个一致且易于理解的格式。

如果我们投票(我知道我们现在不投票),我会投赞成票。
0 投票

在 Emacs 中,您可以使用这种次要模式来用颜色突出显示成千上万的块:https://emacs.stackexchange.com/a/59343

...