2010-09-26 66 views
-7

即時通訊新的「真正的」Javascript:ing我知道更多的函數式編程。Javascript可以實現面向對象,但Ruby不能實現函數式編程?

看來,在Javascript中,你可以從兩個世界中獲得最好的功能和麪向對象編程。

但是在Ruby中,您沒有頭等函數(函數作爲數據類型)。

這是否意味着Javascript支持兩全其美,而Ruby僅支持面向對象的編程風格?

+7

(我不確定我是否會稱JavaScript爲「兩全其美」......) – 2010-09-26 15:04:31

+7

-1用於討論ruby,而對語言沒有絲毫的線索。 – glebm 2010-09-26 16:24:39

+0

匿名函數不是一種功能性語言。 – NullUserException 2010-09-26 17:29:36

回答

7

紅寶石確實有一流的功能。是什麼讓你覺得它不? 維基百科:具有一流的功能的語言是其中:

該語言支持的程序的執行過程中構建新的功能,將它們存儲在數據結構中,將它們作爲其他函數的參數,並將它們作爲其他函數的值返回。

你可能掛了這樣的事實:Ruby的特效/ Lambda表達式需要通過call()被調用,但這不會對他們的影響firstclassness。 Common Lisp lambdas也被調用funcall以及我不記得任何人聲稱Common Lisp沒有頭等功能。

+2

sepp2k:看到這裏:http://cl-cookbook.sourceforge.net/functions.html看來,在普通的lisp(不像scheme)你需要調用一個lambda(綁定到一個變量)'funcall' :例如(let((foo(lambda(x)x)))(funcall foo y)) – horseyguy 2010-09-26 17:20:39

+0

當然,你是對的。我一度困惑。 – sepp2k 2010-09-26 17:28:28

0

功能性編碼與功能性語言編碼有區別。 Ruby可能沒有很多功能語言的功能,但是如果你學會了功能性的思考,你會找到方法來使用Ruby來達到這個目的。

真正重要的是範式 - 您用於構建解決方案的思維過程。函數式語言可用於編寫過程式代碼(就像OO語言一樣),但如果您瞭解不同的範例,則可以應用最適合您的方案的方法。

如果你到書,我很喜歡「Real World Functional Programming」(與飛碟雙向先生合着)

+0

是不是有關函數式編程,但使用JavaScript的好書? – 2010-09-26 15:12:12

+0

沒有具體的,我可以推薦 – STW 2010-09-26 15:17:14

+0

你想做什麼?功能方法適用於特定類型的問題,除了數學和科學之外,您通常需要使用第二種語言來實現您的目標(或支持在無狀態/純功能代碼和有狀態之間劃出界限的語言/真實世界的代碼) – STW 2010-09-26 15:19:00