- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ruby 函数式程式设计
Ruby 函數式程式設計 by Arnau
Sanchez
本文件翻譯自 Arnau Sanchez (tokland)所編譯的這份文件
RubyFunctionalProgramming。
同時也有日文版本。
目錄
簡介
理論部分
Ruby 的函數式程式設計
o 不要更新變數
o 不要重用變量
用 Blocks 作為高階函數
物件導向與函數式程式設計
萬物皆表達式
遞迴
惰性枚舉器
一個實際的範例
結論
簡報
延伸閱讀
簡介
命令式程式設計比較威嗎? 不!不!不!只是比較快,比較簡單,比較誘人而
已。
x = x + 1
在以前上小學的美好回憶裡,我們可能都曾對上面這個式子感到困惑。這個 x
到底是什麼呢?為什麼加了一之後,x 仍然還是 x。
不知道為什麼,我們就開始寫程式了,也就不在乎這是為什麼了。心想:
“嗯”, “這不是什麼大問題,程式設計就是事情做完最重要,沒有必要去挑
剔數學的純粹性 (讓大學裡的大鬍子教獸們去煩惱就好)” 。但我們錯了,
也因此付出極高的代價,只因我們不了解它。
理論部分
維基百科的解釋: “函數式程式設計是一種寫程式的範式,將計算視為對數學
函數的求值,並避免使用狀態及可變的資料” 換句話說,函數式程式設計提倡
沒有副作用的程式,不改變變數的值。這與命令式程式設計相反,命令式程式
設計強調改變狀態。
令人驚訝的是,函數式程式設計就這樣而已。那…有什麼好處呢?
更簡潔的程式碼: “變數”一旦定義之後就不再改動,所以我們不需要
追蹤變數的狀態,就可以理解一個函數、方法、類別、甚至是整個專案
是怎麼工作的。
參照透明:表達式可以用本身的值換掉。如果我們用同樣的參數呼叫一
個函數,我們確信輸出會是一樣的結果(沒有其它的狀態可改變它的
值)。這也是為什麼愛因斯坦說: “重複做一樣的事卻期望不同的結
果”是瘋狂的理由。
參照透明打開了前往某些美妙事物的大門
平行化:如果呼叫函數是各自獨立的,則他們可以在不同的進程甚至是
機器裡執行,而不會有競態條件的問題。 “平常” 寫 Concurrency 程
式討厭的細節(鎖、semaphore…等)在函數式程式設計裡面通通消失不
見了。
記憶化:由於函數呼叫的結果等於它的回傳值,我們可以把這些值快取
起來。
模組化:程式碼裡不存有狀態,所以我們可以將專案用小的黑箱連結起
來,函數式程式設計提倡自底向上的程式設計風格。
容易除錯:函數彼此互相隔離,只依賴輸入與輸出,所以很容易除錯。
Ruby 的函數式程式設計
一切都是這麼美好,但怎樣才能將函數式程式設計,應用到每天寫 Ruby (Ruby
不是個函數式語言)的程式開發裡呢?函數式程式設計廣義來說,是一種風
格,可以用在任何語言。當然啦,用在特別為這種範式打造的語言裡顯得更自
然,但某種程度上來說,可以應用到任何語言。
讓我們先釐清這一點:本文沒有要提倡古怪的風格,比如僅僅為了要延續理論
函數式程式設計的純粹性所帶來的古怪風格。反之,我想說的重點是,我們應
該 當可以提昇程式碼品質時,才使用函數式程式設計 ,不然這只不過是個糟
糕的解決辦法。
不要更新變數
別更新它們,創造新的變數。
不要對陣列或字串做 append
No:
indexes = [1, 2, 3]
indexes 4
indexes # [1, 2, 3, 4]
Yes:
indexes = [1, 2, 3]
all_indexes = indexes + [4] # [1, 2, 3, 4]
不要更新 hash
No:
hash = {:a = 1, :b = 2}
hash [:c] = 3
hash
Yes:
hash = {:a = 1, :b = 2}
new_hash = hash.merge (:c = 3)
不要使用破壞性方法
No:
string = hell
您可能关注的文档
- portfolio(作品two)_product report(产品报告书).pdf
- postgres confchina2015_曾文旌_pg9.4逻辑日志同步方案介绍_v2.pdfx.pdf
- psd-bpa潮流程序3.03版本使用手册.pdf
- psd-sccp短路电流程序用户手册.pdf
- psd-ssap小干扰稳定性分析程序培训手册(ver1.6).pdf
- psd-ssap小干扰稳定性分析程序培训手册(ver1.6)20060514.pdf
- psd单线图格式潮流图程序用户手册2006.pdf
- pyqt4入门指南 pdf中文版.pdf
- q337.实用冲压模具技术手册.pdf
- qcon上海2015-高性能分布式paas解决方案-王璞.pdf
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
文档评论(0)