国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > 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'); 
?
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖安县| 林口县| 阳城县| 张家港市| 新平| 尖扎县| 宣汉县| 武清区| 虞城县| 铜川市| 沙洋县| 古丈县| 犍为县| 丰顺县| 田阳县| 永登县| 阿勒泰市| 临城县| 洪江市| 黎平县| 咸宁市| 孟连| 夏津县| 志丹县| 驻马店市| 库尔勒市| 荥阳市| 莲花县| 衡山县| 玉树县| 崇州市| 靖州| 万全县| 元氏县| 民丰县| 美姑县| 宜阳县| 泸西县| 调兵山市| 甘洛县| 荔波县|