接触 Emacs 也就 1年时间
以前用过 C/C++、Python,很少会去关注代码的缩进、布局(代码块怎么放置)。
最近想尝试学习下 elisp,看了些其他人的代码,有时也自己捣鼓下配置,写些简单的函数。
我发现一个问题,自己有时不自觉的会去想这些代码块怎么排放,有些行显得特别长,有些又特别短,看着别扭,感觉没有美感(不是全部)。
有没有跟我一样感觉的,或者大家是怎么看这个问题的?
接触 Emacs 也就 1年时间
以前用过 C/C++、Python,很少会去关注代码的缩进、布局(代码块怎么放置)。
最近想尝试学习下 elisp,看了些其他人的代码,有时也自己捣鼓下配置,写些简单的函数。
我发现一个问题,自己有时不自觉的会去想这些代码块怎么排放,有些行显得特别长,有些又特别短,看着别扭,感觉没有美感(不是全部)。
有没有跟我一样感觉的,或者大家是怎么看这个问题的?
确实如此。
随心所欲就是美感
可以看看这个 GitHub - bbatsov/emacs-lisp-style-guide: A community-driven Emacs Lisp style guide
我的个人体验是, lisp 代码排版对可读性的影响远大于类 C 代码. 接触 emacs 几年了, 还是爱不起来 lisp. 尤其当看到稍微长一点的 lisp 函数, 脑子会本能抗拒.
我看你的代码不说有美感,至少不丑。但自己写出来常常感觉代码布局丑,不太行。
可能你的“随心所欲”已经是你经过这么多年的选择形成的,知道什么地方该用什么函数,或者怎么缩进比较有美感。
这个我看过,我目前跟你有类似的感觉,看着看着脑子就会抗拒
大佬,我想请教下,你刚开始学的阶段有过类似的感觉吗?
从美感上说,lisp代码应该写的够“碎”,每个函数都简单到只有一两行。但是实际写代码没有人会整那么碎。
因为有强大的宏系统,理论上,大多是不好看的结构可以调整成好看的结构,但是,没人会闲的在那种事上花时间。
有一些东西在lisp里面注定是难看的,比如eval in quote,比如dotted pair,比如gensym,比如'((()))
,但是这些东西就是lisp的一部分。
多层括号影响阅读,即使加了彩虹括号,如果这个函数非常长,仍然会很容易弄乱层级。我写elisp代码多了才开始惯用Emacs提供的C-M-f
,C-M-b
,C-M-k
这些键。
不管哪一门语言,如果想写出维护性好的代码,注释的量不应该少于代码的1/3,但实际上很多人几乎不写注释,写的爽就完了。
即使强大的programmar写代码也很少是成竹在胸,在设计上花的时间与实际编码的时间可能是1:1甚至2:1(这里面有一部分时间是一遍写代码一边调整设计)。当这个过程完成后,美观是会普遍打折的。而在lisp里面,出于代码的灵活性,这个过程会被拉的很长。
Emacs自带的缩进排版不是万能的,但也没有更通用的方案了,总之,像写python那样子无脑按tab是不行的,你得有意识地考虑什么时候换行合适。如果你不想考虑,你一定会遇到同样的问题。
也许可以找一些更智能的lisp排版系统试试。
我一开始也看着不习惯,看多了,写多了就习惯了。太长了可以换行,短的就没办法了,放在其他语言里面也是一样的。我觉得 与其追求形式上的美感,不如追求实现简洁和逻辑高效的美感。用很短的代码,就能实现一个高效的 pure function,(我有时经常陷入到连局部变量的使用都要尽可能的不浪费,考虑合适的变量和函数的命名,优化执行的效率等等)这件事情本身就是极具美感的,哈哈哈。
没有啊,我反而觉得lisp限制很少,很新奇哇
我觉得最丑的是html,或者xml,其它的语言包括json我感觉都还好.都可以写出漂亮的代码
提前设计的越好,写出来的elisp越好看,我个人经验是这样。
看自己的有美感,看别人的没有
应该是我们的配置代码没有美感吧。看别人像aboabo写的ivy之类的,还是相当有美感的哇
PS: 你要是说matlab、R代码没有美感,我表示+1
elisp靠空格或换行传参的设计,再加上一个括号为一个对象,结果就是传参进一个内部有多括号换行的函数时找都要找半天
R代码还可以很美的~ 比如多用 pipeline 操作符 |>