四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

用函數(shù)式編程技術(shù)編寫(xiě)優(yōu)美的 JavaScript_ibm

因?yàn)楹瘮?shù)式編程采用了完全不同的組織程序的方式,所以那些習(xí)慣于采用命令式范例的程序員可能會(huì)發(fā)現(xiàn)函數(shù)式編程有點(diǎn)難學(xué)。在這篇文章中,您將了解一些關(guān)于如何采用函數(shù)式風(fēng)格,用 JavaScript 編寫(xiě)良好的、優(yōu)美的代碼的示例。我將討論: 

函數(shù)式編程概念,包括匿名函數(shù)、調(diào)用函數(shù)的不同方法,以及將函數(shù)作為參數(shù)傳遞給其他函數(shù)的方式。

函數(shù)式概念的運(yùn)用,采用的示例包括:擴(kuò)展數(shù)組排序;動(dòng)態(tài) HTML 生成的優(yōu)美代碼;系列函數(shù)的應(yīng)用。 
函數(shù)式編程概念

 請(qǐng)告訴每個(gè)人。請(qǐng)把這個(gè)提交給:

  
  Digg  

  Slashdot  

 

在那些通過(guò)描述 “如何做” 指定解決問(wèn)題的方法的語(yǔ)言中,許多開(kāi)發(fā)人員都知道如何進(jìn)行編碼。例如,要編寫(xiě)一個(gè)計(jì)算階乘的函數(shù),我可以編寫(xiě)一個(gè)循環(huán)來(lái)描述程序,或者使用遞歸來(lái)查找所有數(shù)字的乘積。在這兩種情況下,計(jì)算的過(guò)程都在程序中進(jìn)行了詳細(xì)說(shuō)明。清單 1 顯示了一個(gè)計(jì)算階乘的可能使用的 C 代碼。


清單 1. 過(guò)程風(fēng)格的階乘

int factorial (int n)
{
  if (n <= 0)
    return 1;
  else
    return n * factorial (n-1);
}



這類語(yǔ)言也叫做過(guò)程性 編程語(yǔ)言,因?yàn)樗鼈兌x了解決問(wèn)題的過(guò)程。函數(shù)式編程與這個(gè)原理有顯著不同。在函數(shù)式編程中,需要描述問(wèn)題 “是什么”。 函數(shù)式編程語(yǔ)言又叫做聲明性 語(yǔ)言。同樣的計(jì)算階乘的程序可以寫(xiě)成所有到 n 的數(shù)字的乘積。計(jì)算階乘的典型函數(shù)式程序看起來(lái)如 清單 2 中的示例所示。


清單 2. 函數(shù)式風(fēng)格的階乘

factorial n, where n <= 0     := 1
factorial n    := foldr * 1 take n [1..]



第二個(gè)語(yǔ)句指明要得到從 1 開(kāi)始的前 n 個(gè)數(shù)字的列表(take n [1..]),然后找出它們的乘積,1 為基元。這個(gè)定義與前面的示例不同,沒(méi)有循環(huán)或遞歸。它就像階乘函數(shù)的算術(shù)定義。一旦了解了庫(kù)函數(shù)(take 和 foldr)和標(biāo)記(list notation [ ])的意義,編寫(xiě)代碼就很容易,而且可讀性也很好。

 只用三行 Miranda 代碼就可以編寫(xiě)例程,根據(jù)參數(shù),使用廣度優(yōu)先或深度優(yōu)先遍歷處理 n 叉樹(shù)的每個(gè)節(jié)點(diǎn),而且元素可以是任何通用類型。  

從歷史上看,函數(shù)式編程語(yǔ)言不太流行有各種原因。但是最近,有些函數(shù)式編程語(yǔ)言正在進(jìn)入計(jì)算機(jī)行業(yè)。其中一個(gè)例子就是 .NET 平臺(tái)上的 Haskell。其他情況下,現(xiàn)有的一些語(yǔ)言借用了函數(shù)式編程語(yǔ)言中的一些概念。一些 C++ 實(shí)現(xiàn)中的迭代器和 continuation,以及 JavaScript 中提供的一些函數(shù)式構(gòu)造(functional construct),就是這種借用的示例。但是,通過(guò)借用函數(shù)式構(gòu)造,總的語(yǔ)言編程范例并沒(méi)有發(fā)生變化。JavaScript 并沒(méi)因?yàn)楹瘮?shù)式構(gòu)造的添加就變成了函數(shù)式編程語(yǔ)言。

我現(xiàn)在要討論 JavaScript 中的函數(shù)式構(gòu)造的各種美妙之處,以及在日常編碼和工作中使用它們的方式。我們將從一些基本功能開(kāi)始,然后用它們查看一些更有趣的應(yīng)用

匿名函數(shù)

在 JavaScript 中,可以編寫(xiě)匿名函數(shù)或沒(méi)有名稱的函數(shù)。為什么需要這樣的函數(shù)?請(qǐng)繼續(xù)往下讀,但首先我們將學(xué)習(xí)如何編寫(xiě)這樣一個(gè)函數(shù)。如果擁有以下 JavaScript 函數(shù): 
清單 3. 典型的函數(shù)

function sum(x,y,z) {
  return (x+y+z);
}




然后對(duì)應(yīng)的匿名函數(shù)看起來(lái)應(yīng)當(dāng)如下所示: 
清單 4. 匿名函數(shù)

function(x,y,z) {
  return (x+y+z);
}




要使用它,則需要編寫(xiě)以下代碼:


清單 5. 應(yīng)用匿名函數(shù)

var sum = function(x,y,z) {
  return (x+y+z);
}(1,2,3);
alert(sum);



使用函數(shù)作為值

也可以將函數(shù)作為值使用。還可以擁有一些所賦值是函數(shù)的變量。在最后一個(gè)示例中,還可以執(zhí)行以下操作: 
清單 6. 使用函數(shù)賦值

var sum = function(x,y,z) {
  return (x+y+z);
}
alert(sum(1,2,3));




在上面 清單 6 的示例中,為變量 sum 賦的值是函數(shù)定義本身。這樣,sum 就成了一個(gè)函數(shù),可以在任何地方調(diào)用。

調(diào)用函數(shù)的不同方法

JavaScript 允許用兩種方式調(diào)用函數(shù),如清單 7 和 8 所示。 


清單 7. 典型的函數(shù)應(yīng)用

alert (“Hello, World!");






清單 8. 用函數(shù)作為表達(dá)式

(alert) (“Hello, World!");



所以也可以編寫(xiě)以下代碼:


清單 9. 定義函數(shù)之后就可以立即使用它

( function(x,y,z) { return (x+y+z) } ) (1, 2, 3);



可以在括號(hào)中編寫(xiě)函數(shù)表達(dá)式,然后傳遞給參數(shù),對(duì)參數(shù)進(jìn)行運(yùn)算。雖然在 清單 8 的示例中,有直接包含在括號(hào)中的函數(shù)名稱,但是按 清單 9 中所示方式使用它時(shí),就不是這樣了。

將函數(shù)作為參數(shù)傳遞給其他函數(shù)

也可以將函數(shù)作為參數(shù)傳遞給其他函數(shù)。雖然這不是什么新概念,但是在后續(xù)的示例中大量的使用了這個(gè)概念。可以傳遞函數(shù)參數(shù),如 清單 10 所示。


清單 10. 將函數(shù)作為參數(shù)傳遞,并應(yīng)用該函數(shù)

var passFunAndApply = function (fn,x,y,z) { return fn(x,y,z); };

var sum = function(x,y,z) {
  return x+y+z;
};

alert( passFunAndApply(sum,3,4,5) ); // 12



執(zhí)行最后一個(gè) alert 語(yǔ)句輸出了一個(gè)大小為 12 的值。

使用函數(shù)式概念

前一節(jié)介紹了一些使用函數(shù)式風(fēng)格的編程概念。所給的示例并沒(méi)有包含所有的概念,它們?cè)谥匾苑矫嬉矝](méi)有先后順序,只是一些與這個(gè)討論有關(guān)的概念而已。下面對(duì) JavaScript 中的函數(shù)式風(fēng)格作一快速總結(jié): 

函數(shù)并不總是需要名稱。 
函數(shù)可以像其他值一樣分配給變量。 
函數(shù)表達(dá)式可以編寫(xiě)并放在括號(hào)中,留待以后應(yīng)用。 
函數(shù)可以作為參數(shù)傳遞給其他函數(shù)。 

這一節(jié)將介紹一些有效使用這些概念編寫(xiě)優(yōu)美的 JavaScript 代碼的示例。(使用 JavaScript 函數(shù)式風(fēng)格,可以做許多超出這個(gè)討論范圍的事。)

擴(kuò)展數(shù)組排序 
先來(lái)編寫(xiě)一個(gè)排序方法,可以根據(jù)數(shù)組元素的日期對(duì)數(shù)據(jù)進(jìn)行排序。用 JavaScript 編寫(xiě)這個(gè)方法非常簡(jiǎn)單。數(shù)據(jù)對(duì)象的排序方法接受一個(gè)可選參數(shù),這個(gè)可選參數(shù)就是比較函數(shù)。在這里,需要使用 清單 11 中的比較函數(shù)。

清單 11. 比較函數(shù)

function (x,y) {
    return x.date  主站蜘蛛池模板: 青春之放纵作文免费阅读| 礼佛大忏悔文注音版全文| 我的刺猬女孩大结局| 无声真相电影免费观看| 《西湖的绿》宗璞| 苑琼丹三级| 乡村女老师| 大叔呀你到底想干嘛| 名剑风流 电视剧| 玉匣记白话全书| 水蜜桃蜜桃在线观看 | 无籍者| 丧尸童子军| 电影《神童》| 山东卫视节目表| 圣般若摄颂| 视频污污| 俺去也电影网| 爱来的刚好演员表| 03s402| 公务员体检甲状腺一共查几项| 林继东| 唐人街探案四免费观看| 抗日电影大突围完整版| 请假单| 金秘书为什么那样| 韧战作文800字初中| 啊啊视频| 电影男女| 秀场视频高清完整版| 可爱美女跳舞蹈视频| 好3| 哪吒电影1| 唐安琪视频| 间宫祥太朗| 台版十七岁免费观看| 泰坦尼克号电影完整版在线观看| 招聘女服务员2| nhk| 色域在线| ,xx|