我知道这种事情无所谓……但是,呃,反正我是水定
(when (and (sth1) (sth2))
(body))
OR
(when (and (sth1)
(sth2))
(body))
在语句都不太长的情况下,哪种好点?
我知道这种事情无所谓……但是,呃,反正我是水定
(when (and (sth1) (sth2))
(body))
OR
(when (and (sth1)
(sth2))
(body))
在语句都不太长的情况下,哪种好点?
无所谓好坏。
另外既然这么在意风格的话——when
的缩进是两个空格,不是四个。
另外我只是在论坛上没写对而已…… 所以就是哪个觉着顺眼就用哪个?
用aboabo的lispy自动排版一下,是哪种就用那种,这样以后排版方便。
我投2一票 楼主啊,代码风格这种事,在没有和别人明确合作要求下,难道不应该以自己的审美为准?
无所谓好坏,以自己是否能一眼看清楚为原则。
如果是两个很简短的条件,就写一行;如果是复杂的组合语句,或者两个语句存在相似性、而你需要突出它们的差异,就写两行。
我觉得这里 and
没特殊之处,所以撇开 and
,写 Emacs Lisp1 时常会遇到需要考虑何时和如何断行2的问题,常见的理由有:
但这些理由之间可能会有冲突,无法同时满足,所以需要权衡。另外,可以断行的地方实在是太多了。同样一段代码,不同的人(甚至同一个人在不同的时机下),断行的选择很容易不同。举个例子:
(defun eww-thing-at-point ()
(interactive)
(let ((text (or (and (use-region-p)
(buffer-substring-no-properties
(region-beginning) (region-end)))
(current-word)
(read-string "EWW: "))))
(eww text)))
(defun eww-thing-at-point ()
(interactive)
(let ((text
(or (and (use-region-p)
(buffer-substring-no-properties
(region-beginning)
(region-end)))
(current-word)
(read-string "EWW: "))))
(eww text)))
...
不知道这算优点还是缺点,但 Emacs Lisp 中如何断行常常会困扰到我。
1 或许其它的语言都有类似的问题,只是 Emacs Lisp 中更常见些。 2 不仅仅是要不要断行,也要考虑在什么位置断行。
实际上C也挺容易遇到这类问题 (关于大括号的那个有名的争论) ……只不过相比而言规范比较死/已经有很多公认的规则了,所以也没那么多争论。 Emacs Lisp比其他的Lisp在格式问题上似乎更加自由。所以就成了问题……
我目前的方案是:
(region-beginning) (region-end)
),就不断,否则断行;唯一不太容易被断行困扰的估计只有缩进和 / 或断行是句法的一部分的那种语言了吧……比如Python和Shell Script……
从一个人写的 Emacs Lisp 的风格可以看出 TA 主要是写什么语言的。
以尽量紧凑为佳。
然而垂直紧凑重要还是水平紧凑重要? 这真的是个问题
看着舒服就行
什么?还有垂直紧凑这种东西?改行间距?
垂直紧凑=行数少
哈,我就经常做些违反 elisp 惯例的事情,例如:
(let ((...))
(when (...)
(body)
))
主要考虑的是:
避免编辑出错,毕竟整行复制/粘贴/删除是最方便的,其它语言的一些风格指南鼓励 trailing comma 也是这个原因:
// bad
[
1,
2
]
// good
[
1,
2,
]
突出 body
强调结束,避免与后续代码纠缠。至今不太习惯 elisp 的缩进,代码稍微复杂一点,缩进就不太直观了。如果写成 body))))
,而且这一行比较长的话,就难免要怀疑下一行跟 body 是不是在同一个 if/when 下了
简单来说还是照顾视觉,我个人看代码首先是块,然后才是行。所以把逻辑块排版清楚,会更容易理解。
行少=绩效低=钱少
就跟语文的阅读理解题……