juntao
Fun with underscore.js

Updated 3 years ago

简单就是美

简洁是所有软件从业者追求的终极目标。各种编程箴言,开发法则,最终都会指向简洁/简单这一基本要素。当然究其原因,是人类大脑事实上无法理解复杂的事物,非要将其简化为更为简单的模块才行。

在软件世界中,开发者公认的美的语言,程序库,框架,系统,工具无一例外都是简单的。比如lisp,Markdown,jQuery,管道,*nix系统等等。

复杂的软件正式藉由这些简单的工具的组合而实现。这在不同尺度的软件工程中已经被证明是行之有效(甚至可能是唯一合理的)做法。划分问题,分而治之。这里将通过一些实例来介绍underscore.js这个JavaScript程序库的使用,并在解决问题的同时尝试启发读者思考,然后在其他编程语言中尝试这里学习到的编程思路(比如函数式编程,面向集合等)。

Alan Perlis有一句名言:用100个函数来操作一个数据结构比10个函数操作10个数据结构要好很多。基于一个统一的数据结构,我们可以构建出一系列的小函数,这些小函数又可以组合起来形成一个强大的系统。而为不同的数据结构编写不同的函数,在根本上就削减了复用的可能。

underscore.js建立在JavaScript之上,而JavaScript中的数据结构只有两个:数组对象。而大部分时候,我们会使用数组(数组中的元素为对象)。在JavaScript中,数组本身有很灵活。正如LISP中的List那样。

underscore.js简介

underscore.js是一个小巧而强大的JavaScript函数库。它为原生的JavaScript做了一些包装,提供了众多的API以处理集合,数组,对象以及函数。

JavaScript本身是一门优秀的动态语言,同时它在某些方面有一定的缺陷。《JavaScript语言精粹》这本小书中详细的讨论了这门语言的优势和不足,不过那仅仅只是语言层面的。即使我们使用该书中推荐的最佳实践,在编写应用程序,特别是涉及到数据加工处理的时候,仍然需要编写大量的“重复”代码。

underscore.js中,面向对象,函数式编程,基于列表的封装等等编程范式都有所体现。underscore.js提供众多的工具函数,这些函数可以大大的简化我们代码的编写。jQuery刚一问世就彻底的颠覆了人们用JavaScript编程DOM的方式,而underscore.js则有可能颠覆了人们用JavaScript操作集合/对象的方式,或者说,颠覆人们用JavaScript处理数据的方式。

Web开发

在某种程度上来说,Web开发特别简单。不论规模如何,从流程上看,大致如下:

  1. 客户端发起HTTP请求
  2. 服务器根据请求做分发,不论是做数据库查询,还是本地计算,最终都会返回某种格式的数据
  3. 客户端根据这些数据和模板进行整合之后展现结果

具体的业务计算除外,最关键的部分当属数据的组织和整合了。在对数据的处理上,不论前台还是后台都会涉及,如果你仔细考察代码库中的代码,会发现大部分代码做的事情就是不断的转换,将某种类型的对象通过某种规则转换为另外一种的对象。

在这个转换中,我们需要用到一些工具,比如过滤器选择器转换器等等,这些概念在几乎所有的编程语言中都存在,而在JavaScript中,underscore.js就是这样一个工具。

本书内容简介

本书目前分为三章:

  1. 函数式编程上篇,主要讨论underscore.js中的map/reduce, currying/partial等函数式编程概念
  2. 函数式编程下篇,讨论underscore.js中基于集合的API,其实就是应用式编程(函数式编程的一个细的划分)的应用
  3. 结合所学,给出一个实际的例子来学习如何在前端应用中发挥underscore.js的强大能力