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