為什麼函數式編程沒有流行起來?【z】

來源:互聯網
上載者:User

函數式編程已經不是什麼新概念了,而且在各個技術論壇和新聞網站上也時不時的掛起一陣函數式編程的旋風。但是對於很多編寫應用程式的編程人員來說,函數式編程仍顯得那麼陌生和遙遠。對此Confusion在tweakblog.net上發起了一場關於“為什麼函數式程式設計語言沒有流行起來”的大討論。

Confusion認為函數式程式設計語言之所以沒有流行起來,原因是其文檔及樣本都顯得過於複雜難懂,讓人望而卻步:

軟體工程領域的一些權威對於函數編程(functional programming——FP)事實上不怎麼流行深表遺憾。支援者這一觀點的人通常責怪聽眾短視或其老闆無能,認為不同意他們意見的人根本不懂函數式編程為何物。而這反過來卻可能說明一點:他們沒有給出恰當的解釋。
我想限制FP語言被採用的實際原因是:真正吸引大家的是函數式程式設計語言的一些優點,但是這些優點並沒有被很好地闡述和樣本。同樣,這些解釋和範例在說服軟體工程師方面顯得非常失敗,因為它們沒有回答軟體工程師們在日常工作中所關心的問題。

接著Confusion用一個有關定義reduce的例子進一步說明了這一點:

(reduce f x) nil = x
(reduce f x) (cons a l) = f a ((reduce f x) l)
……
這很抽象,多數人並不熟悉。可是,FP語言的文檔只包含了這類非常數學化的例子。難道沒有人寫一個用來證明FP強大功能的寵物店的例子嗎?這才是我們大多數人的常規工作。

對於Confusion的這一看法,引來了眾多讀者的討論,大家就這一問題紛紛發表了自己的看法。 RayNbow對於FP例子過於抽象的看法就表達了不同意見:

費伯納西數列(Fibonacci )的例子(還有階乘)通常被用作說明語言文法的具體例子。因為函數式程式設計語言以函數為中心,還有什麼更好的方法展示如何定義它們的嗎?你可以把費伯納西數列和階乘的例子看作函數世界的Hello World。

Tubbie認為FP的特長就在於計算方面,因此編寫資料庫或使用者介面應用的程式員根本不需要使用它:

FP支援者之所以展示計算例子,是因為FP擅長此道。問題是大多數程式員每天編寫的大多數代碼都是關於與資料庫、使用者介面等互動的,並不包含複雜的數學運算或演算法。FP語言是非常不同的的語言,如果只解決邊界條件問題,就不需要學習它。

Dooievriend非常贊同Tubbie的說法:

……我很喜歡函數式語言,它非常適合解決要解決複雜的運算問題。……但是關於用它來構建GUI並訪問資料庫,我沒有任何思路。對我來說,只在複雜和經常變化的問題出現時,才會用到FP,但它是嵌入到其他語言中使用。這是FP語言應被使用的方式,我至少知道Mercury是這麼用的……

有不少人表示同意Dooievriend的這一說法,他們認為只有混合了命令式語言(imperative languages )與函數式語言(functional languages )才能做到兩全其美。

就函數式語言沒有很好的說明和例子這一說法,雖然Morton也表示同意,但是他並不認為FP沒有流行起來:

……我沒覺得FP不流行。我經常發現同事在代碼中使用了函數模式,可是他們自己都沒有意識到。現在也很難找到不支援FP的語言。在Java和.Net都開始支援FP概念的時候,你們居然還擔心FP不流行。

Alex更是現身說法,說自己已經把函數式編程當作了“秘密武器”:

你的意思是還沒人寫出一篇能讓人信服的說明函數編程好處的文章嗎? …… 我和我的團隊已經用F#開發了一個穩定的、現實的、商用的業務應用,而且已經被大公司買走了。函數式編程最成功之處是,根據任務的特性,代碼量可以減少4 到10倍,對此我十分確信,因為我們用F#重寫了一些老代碼,所寫的代碼也更加易於維護和擴充。 因此,它給了我們競爭優勢。或許說服不了大多數人對我們來說是好事:),我們已經擁有這一秘密武器了。

 

原帖:http://www.infoq.com/cn/news/2009/03/fp-doesnt-catchon

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.