使用javascript进行功能样式Web编程的好例子是什么?

时间:2009-05-06 21:53:05

标签: javascript functional-programming

我现在每天都在做javascript。我来自OO背景,我接触过的大部分代码都是程序性/ OO风格。我正在寻找能够以功能性方式解决或多或少典型的Web编程任务的好例子。

我没有兴趣拥有任何看起来像功能的任意例子。我正在寻找一个例子,可以展示如何使用功能强大来解决问题比使用其他方法更好。我知道这是一种主观/风格依赖,但不要让自己(我自己)太难。

4 个答案:

答案 0 :(得分:17)

首先,您想要理解函数式编程的含义;也就是说,什么是核心概念以及语言如何使您遵守这些概念。对于OOP,核心概念是封装,继承和多态(或者只是为小公司传递消息)。对于FP,中心原则是referential transparency(这意味着无国籍)。尝试使用不支持功能特性的语言(例如,作为第一类对象的函数)的功能样式进行编程即使不是不可能也会很尴尬。与没有OOP功能的语言中的OOP编程相同。

幸运的是,Javascript是多范式并支持两者。不要寻找“功能”的代码示例,而只考虑可以确保引用透明度的所有方法,这将自然导致使用语言的FP功能,如lambdas,closures ,高阶函数(例如map,reduce,filter),currying等。

说真的,这不是一个非答案。我真的认为这是接近它的最有动力和最有效的方式。

那就是说,这里有一些希望有用的链接。

  1. FP programming in JavaScript

  2. Mostly adequate guide to FP

答案 1 :(得分:5)

Douglas Crockford从他的Functional JavaScript资源页面链接到JavaScript。以下是该网站的摘录:

  

功能是一个功能库   用JavaScript编程。它定义了   标准的高阶函数   例如map,reduce(aka foldl)和   选择(也称为过滤器)。它也定义了   功能,如咖喱,rcurry和   部分功能部分   应用;并撰写,保护和   直到功能级编程。   所有这些功能都接受了   字符串,例如'x - > x + 1','x + 1'或   '+1'作为更详细的同义词   function(x){return x + 1}。

答案 2 :(得分:1)

我记得的一个例子是一个绑定到对象的函数,用于注册为事件处理程序

function bind(aHandler, aBind) {
    var handler = aHandler;
    var bind = aBind;
    return function(event) {
        return handler.call(bind, event);
    }
}

它处理范围(currying)并且很方便。

答案 3 :(得分:0)

看看jQuery。这个博客是一个很好的案例,它是一个功能性的风格。 http://importantshock.wordpress.com/2009/01/18/jquery-is-a-monad/

也就是说,JS并不是一种真正的函数式语言(IMO),因此试图强制它成为一种可能不是开发人员最有效的途径(使用螺丝刀作为锤子)墙但不是那么快:)。再说一遍,它是一种lambda语言。