很多人刚看到文学编程这几个字,就觉得这玩意很好玩,但这些人稍加了解后,又会觉得这玩意是智商税,最后一笑而过了。
只有很少人真正去深入尝试,在实践中探索什么是文学编程。也只有这些人才懂得文学编程的意义。
本文主要总结一下我最近使用文学编程的一些心得。
文学编程的意义到底是什么?在我是看来,它的意义在于能够让自己更自在地,更顺畅地写代码。
当今时代混饭用的编程语言大多是面向对象的语言,不管啥业务需求,都得分别写在各式各样的class里面。如果不写到class,轻者被当做傻子,重者被炒了鱿鱼。因此代码的组织结构其实就是class,就是一个个分离的文件。这其实会打断编程思维的。比如说话,原本一口气把整段话完整说出即可,非要把一段话拆成几段,存成个mp3文件而且还放在不同的文件夹中,这无疑给人理解带来麻烦。写代码跟写文章一样,都存在一定的思路。写文章可以自由自在地安排段落的顺序,然而写代码却不能,数据操作相关的代码只能放在数据类的文件夹中,工具类的代码只能放在通用文件夹中。把某些代码分类放入不同的文件夹,本质上就是给代码贴标签。遗憾的在于这种方式只能贴一个标签,因为一个代码文件只能放在一个文件夹中。
而文学编程不是贴标签,它像写文章一样,你可以自由地安排代码在文章的位置,经过文学编程引擎处理之后,却能够满足工程上的“贴标签”。
所以我非常喜欢这种文学编程风格。
我使用emacs来玩文学编程。emacs中有个org模式也是天生适合文学编程的。markdown应该也行,但我没有尝试过。就算markdown可以做,也需要一个不错的编辑器,能够识别代码的语法错误。不然开发效率还是低下。
教程可以参阅:
https://orgmode.org/worg/org-contrib/babel/intro.html
有人翻译了一部分中文:
https://brantou.github.io/2017/04/01/babel-intro/
其中重点在于如何在文档中插入代码,以及如何生成代码文件。
插入代码很简单,emacs快捷键: C-c C-, s
emscs会插入如下字符串:
#+begin_src
#+end_src
如果你想编写的是javascript,那么在begin_src后面加上对应的语言名称即可。
如果想要指定生成文件的路径,这加上 :tangle 文件路径
即可。如果不想生成代码文件,则不加。
如下:
#+begin_src javascript :tangle task/transTask.js
console.log('hello world')
#+end_src
有时候想要将某些代码片段加入到一些代码当中,则参考以下方式:
#+name: hello-world-prefix
#+begin_src sh :exports none
echo "/-----------------------------------------------------------\\"
#+end_src
#+name: hello-world-postfix
#+begin_src sh :exports none
echo "\-----------------------------------------------------------/"
#+end_src
#+name: hello-world
#+begin_src sh :tangle hello.sh :exports none :noweb yes
<<hello-world-prefix>>
echo "| hello world |"
<<hello-world-postfix>>
#+end_src
上面有两个代码片段名字分别为: hello-world-prefix, hello-world-postfix。最后的代码片段将会输出到hello.sh,内容引用了前面两个代码片段。
这种方式对于复用一些代码片段是非常有用。
代码文章已经编写完成了,应该如何将代码输出呢?
快捷键: C-c C-v t
就这么简单。
网友评论