本書以案例形式循序漸進(jìn)講解Ruby對象模型原理和高級應(yīng)用技巧,堪稱動態(tài)語言的設(shè)計(jì)模式。書中講述的各種Ruby編程模式,完全可以應(yīng)用于其他動態(tài)語言(甚至靜態(tài)語言)。Ruby之父松本行弘作序推薦。
適讀人群 :程序員、動態(tài)語言編程愛好者
元編程是Ruby世界的如意金箍棒,只有能駕馭它的人才能充分發(fā)揮其潛力。
《Ruby元編程(第2版)》在大量剖析實(shí)例代碼的基礎(chǔ)上,詳細(xì)講解了33種元編程技巧。
讀者不僅能學(xué)到對象模型、作用域、單件類、代碼塊等元編程概念,還將學(xué)習(xí)Rails的組織結(jié)構(gòu)和工作原理,以及如何借助元編程編寫領(lǐng)域?qū)僬Z言。
第2版更新Ruby 2.0、Ruby 2.1內(nèi)容,大部分示例代碼取自流行的軟件框架和類庫,包括Rails4。
Ruby的很多特性繼承自其他語言,這些語言包括Lisp、Smalltalk、C、Perl等。它的元編程特性來自于Lisp和Smalltalk。元編程有點(diǎn)像魔法,看起來讓人震驚。世界上有兩種的魔法:好的白魔法和壞的黑魔法。同樣,元編程也有兩面性:你可以用元編程增強(qiáng)語言的功能,還可以創(chuàng)建領(lǐng)域?qū)僬Z言;但是你也可能陷入到元編程的陷阱里。元編程是一種容易讓人迷惑的技術(shù)。
Ruby相信你是一位成熟的程序員,它賦予你元編程這樣強(qiáng)大的能力。但是你必須記。耗芰υ酱,責(zé)任就越大。
請盡情享受Ruby編程吧!
——松本行弘
Paolo Perrotta,有超過15年的軟件設(shè)計(jì)和開發(fā)經(jīng)驗(yàn),他開發(fā)過嵌入式軟件、企業(yè)級軟件、計(jì)算機(jī)游戲和web應(yīng)用,還發(fā)表過上百篇技術(shù)文章。他在歐洲各國教授敏捷課程,過著游牧般的生活。
第一部分 Ruby元編程
第1章 元這個(gè)字眼
1.1 鬼城與自由市場
1.2 程序員Bob的故事
1.3 元編程和Ruby
第2章 星期一:對象模型
2.1 打開類
2.2 類的真相
2.3 小測驗(yàn):缺失的連接線
2.4 調(diào)用方法時(shí)發(fā)生了什么?
2.5 小測驗(yàn):混亂的模塊
2.6 對象模型小結(jié)
第3章 星期二:方法
3.1 代碼繁復(fù)的問題
3.2 動態(tài)方法
3.3 method_missing方法
3.4 小測驗(yàn):消滅Bug
3.5 白板類
3.6 小結(jié)
第4章 星期三:代碼塊
4.1 學(xué)習(xí)代碼塊
4.2 小測驗(yàn):Ruby的#符號
4.3 代碼塊是閉包
4.4 instance_eval方法
4.5 可調(diào)用對象
4.6 編寫領(lǐng)域?qū)僬Z言(DSL)
4.7 小測驗(yàn):改良的DSL
4.8 小結(jié)
第5章 星期四:類定義
5.1 揭秘類定義
5.2 小測驗(yàn):Taboo類
5.3 單件方法
5.4 單件類
5.5 小測驗(yàn):模塊的麻煩
5.6 方法包裝器
5.7 小測驗(yàn):打破數(shù)學(xué)規(guī)律
5.8 小結(jié)
第6章 星期五:編寫代碼的代碼
6.1 通向周末的編程之路
6.2 Kernel#eval方法
6.3 小測驗(yàn):校驗(yàn)過的屬性(第一步)
6.4 小測驗(yàn):校驗(yàn)過的屬性(第二步)
6.5 小測驗(yàn):校驗(yàn)過的屬性(第三步)
6.6 小測驗(yàn):校驗(yàn)過的屬性(第四步)
6.7 鉤子方法
6.8 小測驗(yàn):校驗(yàn)過的屬性(第五步)
6.9 小結(jié)
第7章 尾聲
第二部分 Rails中的元編程
第8章 準(zhǔn)備Rails之旅
8.1 Ruby on Rails
8.2 安裝Rails
8.3 Rails源代碼
第9章 Active Record的設(shè)計(jì)
9.1 簡短的Active Record示例
9.2 Active Record的組成
9.3 經(jīng)驗(yàn)之談
第10章 Active Support的Concern模塊
10.1 Concern模塊出現(xiàn)之前
10.2 ActiveSupport::Concern模塊
10.3 經(jīng)驗(yàn)之談
第11章 alias_method_chain方法沉浮錄
11.1 alias_method_chain方法的興起
11.2 alias_method_chain方法的衰亡
11.3 經(jīng)驗(yàn)之談
第12章 屬性方法的發(fā)展
12.1 屬性方法實(shí)戰(zhàn)
12.2 屬性方法的發(fā)展史
12.3 經(jīng)驗(yàn)之談
第13章 最后的思考
元編程不過是編程
第三部分 附錄
附錄A 常見慣用法
A.1 擬態(tài)方法
A.2 空指針保護(hù)
A.3 Self Yield
A.4 Symbol#to_proc方法
附錄B 領(lǐng)域?qū)僬Z言
B.1 關(guān)于領(lǐng)域?qū)僬Z言
B.2 內(nèi)部和外部領(lǐng)域?qū)僬Z言
B.3 領(lǐng)域?qū)僬Z言和元編程
附錄C 法術(shù)手冊
索引
元編程……聽起來很酷!好像是一種用于高級企業(yè)架構(gòu)的設(shè)計(jì)方法。
事實(shí)上,元編程并非一個(gè)抽象的概念,它是一系列務(wù)實(shí)的編程技巧。在Ruby中,你可以用它完成如下一些工作。
假設(shè)你要寫一個(gè)Ruby程序來連接外部系統(tǒng)(web服務(wù)或者Java程序),你可以用元編程寫一個(gè)包裝器用于接受任何方法的調(diào)用,然后把這些調(diào)用轉(zhuǎn)發(fā)給外部系統(tǒng)。如果某人后來為這個(gè)外部系統(tǒng)添加了方法,即使不修改Ruby包裝器,它也能自動支持新加入的方法。很神奇吧!
假設(shè)你遇到一類問題,需要設(shè)計(jì)某種領(lǐng)域?qū)僬Z言來解決。如果你從頭定義這門語言,并且自己編寫解析器,工作量就太大了。你可以把Ruby改造成處理這個(gè)問題的專屬語言。你甚至可以寫一個(gè)簡單的解釋器從文件中讀取這種基于Ruby語言的代碼。
你可以把Ruby程序的簡潔性提高到Java程序員做夢都不敢想的程度。比如一個(gè)包含20個(gè)方法的類,這些方法的名字看起來都差不多。元編程只用幾行代碼就能定義這些方法。如果你想調(diào)用一長串名字遵循一定的模式(比如名字都以test開頭)的方法,元編程只用一行代碼就能調(diào)用它們。
你可以改造Ruby使之滿足你的需要,而不是去適應(yīng)語言本身。例如,可以用你喜歡的方式增強(qiáng)任何一個(gè)類(包括Array這樣的核心類);可以把想要監(jiān)控的方法封裝起來,當(dāng)他人繼承你的類后,就會執(zhí)行你預(yù)先設(shè)定的代碼……