重构 Clojure(1)

这篇文章基于Writing Friendlier Clojure,作者Adam Bard展示了重构实现一阶单词级Markov 文本生成器的一些 Clojure 代码的方法。
使命是使这段代码更具可读性:

  • markov-data函数接受一个字符串,返回一个哈希图,其键是字符串中的单词,值是键后紧接着的单词序列,实现了一阶单词级 Markov 过程,特殊键:start表示所有开始句子的单词。
  • 重构过程:先写一个处理单个句子的函数process-sentence,使用reduce处理句子中的单词并更新哈希图;再用reduce处理输入字符串text,拆分字符串并对每个句子调用process-sentence;最后重构sentence函数,用递归替代loop,增加变量名可读性和向向量添加元素的惯用方式。
  • 还给出了markov-datasentence函数的一系列表征测试,用于确保代码行为不变,如处理空字符串、单个单词、多个句子等情况,以及考虑 Markov 过程随机性的测试。
  • 引用了相关的文章、作者、资料等,如Working Effectively with Legacy Codecharacterization testsclojure.spec等。最终重构后的代码更易读且可维护。
阅读 23
0 条评论