- 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
- 2025年广西中考地理二轮复习:专题四+人地协调观+课件.pptx
- 2025年广西中考地理二轮复习:专题三+综合思维+课件.pptx
- 2025年中考地理一轮教材梳理:第4讲+天气与气候.pptx
- 第5讲+世界的居民课件+2025年中考地理一轮教材梳理(商务星球版).pptx
- 冀教版一年级上册数学精品教学课件 第1单元 熟悉的数与加减法 1.1.6 认识1-9 第6课时 合与分.ppt
- 2025年中考一轮道德与法治复习课件:坚持宪法至上.pptx
- 2025年河北省中考一轮道德与法治复习课件:崇尚法治精神.pptx
- 八年级下册第二单元+理解权利义务+课件-2025年吉林省中考道德与法治一轮复习.pptx
- 精品解析:湖南省娄底市2019-2020学年八年级(上)期中考试物理试题(原卷版).doc
- 2025年中考地理一轮教材梳理:第10讲+中国的疆域与人口.pptx
最近下载
- GB 55021-2021 既有建筑鉴定与加固通用规范.pdf VIP
- 非煤矿山安全生产执法检查方案.pptx
- 3DMax中英文对照表2.doc
- 2024年四川省德阳市中考生物试题卷(含答案解析).docx
- 苏教版四下简便计算练习题.doc VIP
- 北京市第一零一中学2023-2024学年八年级下学期期中数学试题(原卷版).pdf VIP
- 2025年单招生活常识题目答案大全 .pdf VIP
- 湖北省武汉市2025届高三上学期元月调考数学试题(学生版+解析版).docx
- 卡萨帝 洗衣机 双子云裳洗干一体机 C8 HU12G1 使用说明.pdf
- 2023届高考英语新时政热点阅读 10 人工智能(含解析).docx
文档评论(0)