首页 > 语言 > JavaScript > 正文

Javascript函数式编程简单介绍

2024-05-06 16:24:34
字体:
来源:转载
供稿:网友
什么是函数式编程?根据百度百科的描述,“函数式编程是种编程典范,它将电脑运算视为函数的计算。函数编程语言最重要的基础是 λ 演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。”
 

几十年来,函数式编程一直是计算机科学狂热者的至爱,由于数学的纯洁性和谜一般的本质, 它被埋藏在计算机实验室,只有数据学家和有希望获得博士学位的人士使用。但是现在,它正经历一场复兴, 这要感谢一些现代语言比如Python,Julia,Ruby,Clojure以及——但不是最后一个——Javascript。

你是说Javascript?这个WEB脚本语言?没错!

Javascript已经被证明是一项长期以来都没有消失的重要的技术。这主要是由于它扩展的一些框架和库而使其具有重生的能力, 比如backbone.js,jQuery,Dojo,underscore.js等等。这与Javascript函数式编程语言的真实身份直接相关。 对Javascript函数式编程的理解很重要,并且在相当长的一段时间会对各种水平的程序员很有用。

为什么呢?函数式编程非常强大、健壮并且优雅。它对于大型数据结构非常有用并且高效。 Javascript作为一个客户端脚本语言,在应对日益复杂的网站时,函数式地操作DOM、 组织API响应以及完成一些其它任务会非常有好处。

在这本书里,你将会学习用Javascript进行函数式编程所需要知道的一切:如何用函数式编程构建你的Javascript web应用, 如何解锁Javascript隐藏的力量,如何编写更强大的代码,并且由于程序更小,使得代码更容易维护,能够更快被下载, 并且花费更少的开支。你还会学到函数式编程的核心概念,以及如何将它们应用到Javascript, 还有将Javascript作为函数式语言时如何回避一些问题,如何在Javascript中混合使用函数式编程和面向对象编程。

不过在我们开始前,先来做个实验。

例子

也许快速举个例子是介绍Javascript函数式编程最好的方式。我们将用Javascript完成一些任务—— 一个使用传统、原生的方法,另一个使用函数式编程。然后我们将会比较这两种方法。

应用——一个电子商务网站

为了追求真实感,我们来做一个电子商务网站,一个邮购咖啡豆的公司。这个网站会销售好几种类型的咖啡, 有不同的品质,当然也有不同的价格。

命令式方法

首先,我们开始写程序。为了让这个例子接地气,我们需要创建一些对象来保存数据。如果需要的话我们可以从数据库里取值。 但是现在我们假设他们是静态定义的: 
 

  1. // create some objects to store the data. 
  2. var columbian = { 
  3.  name: 'columbian'
  4.  basePrice: 5 
  5. }; 
  6. var frenchRoast = { 
  7.  name: 'french roast'
  8.  basePrice: 8 
  9. }; 
  10. var decaf = { 
  11.  name: 'decaf'
  12.  basePrice: 6 
  13. }; 
  14. // 我们将使用辅助函数计算价格 
  15. // 根据size打印到一个HTML的列表中 
  16. function printPrice(coffee, size) { 
  17.  if (size == 'small') { 
  18.   var price = coffee.basePrice + 2; 
  19.  } 
  20.  else if (size == 'medium') { 
  21.   var price = coffee.basePrice + 4; 
  22.  } 
  23.  else { 
  24.   var price = coffee.basePrice + 6; 
  25.  } 
  26.  // create the new html list item 
  27.  var node = document.createElement("li"); 
  28.  var label = coffee.name + ' ' + size; 
  29.  var textnode = document.createTextNode(label+' price: $'+price); 
  30.  node.appendChild(textnode); 
  31.  document.getElementById('products').appendChild(node); 
  32. // 现在我们只需根据咖啡的各种价格和size的组合调用printPrice函数 
  33. printPrice(columbian, 'small'); 
  34. printPrice(columbian, 'medium'); 
  35. printPrice(columbian, 'large'); 
  36. printPrice(frenchRoast, 'small'); 
  37. printPrice(frenchRoast, 'medium'); 
  38. printPrice(frenchRoast, 'large'); 
  39. printPrice(decaf, 'small'); 
  40. printPrice(decaf, 'medium'); 
  41. printPrice(decaf, 'large'); 
?
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表