《Ruby程序员修炼之道》(第2版)目录—导读
版權
Ruby程序員修煉之道(第2版)
? 著 [美] David A. Black
譯 鐘鳳鳴 陳雪靜
責任編輯 楊海玲
? 人民郵電出版社出版發行 北京市豐臺區成壽寺路11號
郵編 100164 電子郵件 315@ptpress.com.cn
網址 http://www.ptpress.com.cn
? 讀者服務熱線:(010)81055410
反盜版熱線:(010)81055315
版權聲明
Original English language edition, entitled The Well-Grounded Rubyist, Second Edition by David A. Black published by Manning Publications Co., 209 Bruce Park Avenue, Greenwich, CT 06830. Copyright ?2014 by Manning Publications Co.
Simplified Chinese-language edition copyright ?2015 by Posts & Telecom Press. All rights reserved.
本書中文簡體字版由Manning Publications Co.授權人民郵電出版社獨家出版。未經出版者書面許可,不得以任何方式復制或抄襲本書內容。
版權所有,侵權必究。
內容提要
這是一本深受好評的書。它不僅是一本純Ruby的書,也不僅是一本純Rails的書,而是一本為Rails程序員“優化”過的Ruby書。
本書從Ruby編程語言的基礎開始一直講到動態特性,其中包含大量的真實代碼示例并附有詳細的注解,對日常使用Ruby進行編程中會遇到的每個知識點都進行了清晰的講解。本書的內容由淺入深,主要包含Ruby編程語言的語法、面向對象的特性、默認對象self、控制流技術、常用的內置類、正則表達式、I/O操作,最后用大量的篇幅講述了Ruby中最值得關注的動態特性。
本書不僅適合Ruby編程語言的初學者,也適合有經驗的開發者以及那些想要真正提升Ruby編程技術的愛好者閱讀和學習,具有極高的參考價值。
對本書第1版的贊譽
“如果要學習Ruby語言,就從這本書開始吧!只用這一本足矣。”
——John Griffin, Overstock.com
“David Black對Ruby語言的理解以及他傳授這門知識的能力都是非凡的。”
——Philip Hallstrom, PJKH, LLC
“經過漫長等待,繼Ruby for Rails一書之后David的又一力作問世,這次是對Ruby學習的進一步深化。”
——Rick DeNatale, DenHaven Consulting
“想用Ruby學習面向對象或常規編程的所有人的必讀之書。”
——Robert Klemme, Orga Systems
“David Black再次創作了一本屬于每一位Ruby程序員的案頭參考書。”
——Robert Dempsey, Atlantic Dominion Solutions
“如果想學Ruby語言,這是目前為止最好的一本書。”
——M. Edward (Ed) Borasky, ADP
“想知道Ruby的內部工作原理?David Black在本書中為你揭秘。”
——Patrick Steger, Zühlke Engineering AG
“一本翔實的、基于例子并有絕佳代碼示例的Ruby編程語言教程,是學習這門語言絕好的書。”
——Doug Warren, Java Web Services
“我多么希望我當時學習Rails的時候就有這本書。”
——Patrick Dennis, Management Dynamics, Inc.
“繼Ruby for Rails之后的又一力作。”
——Mark Eagle, Intercontinental Exchange, Inc.
“強烈推薦給每一位Ruby學習者。”
——Greg Donald, VUMC
“這是一本Ruby語言絕妙且詳盡的入門指南。”
——Curtis Miller, Freebootr.com
譯者序
和大多數人一樣,我也是從Ruby on Rails開始結識Ruby語言的。從最早的那個“十分鐘構建博客程序”的例子開始,完全地被吸引住了。從那時起,我在業余時間尋找很多資料和圖書,學習這個驚艷的Web開發框架。但是在編寫Rails程序的時候,其實我們對于Ruby語言知之甚少,學習資源都非常有限,基本上是從看Programming Ruby作為起點的。直到有一天,偶然看到了David A. Black(也就是本書作者)所編寫的Ruby for Rails(R4R),才真正上道。終于在閱讀該書的過程中,解決了許多編寫Rails時對那些“魔法”的疑惑,也真正喜歡上了Ruby語言。轉眼間就快10年了,身邊那些曾經視Ruby為小眾語言的人,后來很多人都開始喜歡上了Ruby,并逐漸在項目中越來越多地使用它。The Rails Way的作者Obie Fernandez在給The Ruby Way作序時寫道:
在相當長的一段時間里,使用Ruby的人被置于主流之外,可是現在看來,我們才是主流。
看過一些關于Ruby的書,它們基本上大而全面,從語法基礎到面向對象,從I/O編程到圖形化接口,從線程到網絡編程,從Web編程到測試框架等,卻很少有書可以像本書一樣,讓Ruby初學者和愛好者真正理解Ruby的對象核心設計——對象個性化(object individuation)。理解對象個性化的設計有多重要呢?這是Ruby真正有別于其他語言的魅力所在,是Ruby語言動態特性的主要構成部分。由于它的動態特性,讓程序員可以用它編寫一門銷售部門的技術小白都能學會的領域特定語言(Domain Specific Languages,DSL),然后生成一份漂亮的需求問卷,再稍加努力就可以生成一份非常有專業感的PDF格式版本。當然,這只是開個小小的玩笑,Ruby編寫DSL的案例,知名的有Rspec或Cucumber這樣的測試框架和Rake這樣的make工具,它們都非常強大且易于編寫。如果你需要找一本把Ruby基礎中每個層面都講得很細致且能把動態特性中的單例類、單例方法、回調機制、自省機制、可調用對象等晦澀難懂的內容都能講得清晰明了的書,那么本書一定是不二之選。本書是R4R的一種延續,作者把R4R中關于Ruby的內容重新整理,并加入了許多Ruby的新特性,旨在將Ruby語言的基礎用一本書全面概括,為讀者將來的Ruby程序員之旅點起一盞航燈。
很榮幸能翻譯這本書,這也讓我多年的Ruby情結有了實現的機會。深深感謝本書的責任編輯楊海玲老師在翻譯過程中給予的極大支持和幫助,同時感謝家人和朋友們提供的支持和鼓勵。
最后,希望本書能讓你輕松愉快地掌握Ruby語言,也希望你在成為Rubyist的同時能推薦更多的人學習這門優雅的語言。
謝謝!
譯者簡介
鐘鳳鳴 海外程序員,常住新西蘭,與本書第二譯者互為連理。從事企業應用開發和手機APP開發多年,對技術充滿熱情,渴望不斷地學習和運用喜歡的技術。
陳雪靜 英語翻譯碩士,程序員家屬。受本書第一譯者的影響,不僅研究英語語言學,也在業余學習計算機語言。
前言
歡迎閱讀本書。自第1版出版以來的5年間,Ruby語言有了許多變化和改進,最大的一次改進是在Ruby語言20歲生日(2013年2月24日)那天發布的Ruby 2.0版本。在2013年年末,準確地說是在圣誕節那天,Ruby 2.1版本發布了。這一版已涵蓋了Ruby 2.1版本的內容。
本書一直深獲好評。這本書滿足了大量讀者的需求,包括許多新學習Ruby的人和很多已經接觸過Ruby但想詳盡了解這門語言并確保自己真正理解了這門語言的人。我一直特別高興的是,一些書評把閱讀這本書的體驗描述為與Ruby老師面對面。畢竟,我是一名Ruby教師,盡管教學和寫作分屬不同角色,但兩者也并非完全不同。
Ruby語言的大部分沒有改變,但還是有相當一部分出現了變化。這次第2版包含了許多新內容,并對原始文本做了大量的審閱和修訂。和第1版一樣,本書并不打算在Ruby語言上面面俱到,或作為一本標準庫參考手冊(這類書已有很多),而是對Ruby的對象模型、內置類和重要編程工具的關鍵環節進行深入的研究和論述。
我想對本書的所有讀者表示熱烈的歡迎,包括本書第1版的老讀者和這本書的新讀者。我希望并且相信讀者會在本書中找到許多樂趣和驚喜。樂在其中吧!
第1版前言
2006年,Manning出版社出版了我寫的Ruby for Rails: Ruby Techniques for Rails Developers。我撰寫Ruby for Rails(大家所熟知的R4R)的目的是讓Rails的開發者了解Rails開發者也就是Ruby開發者這一事實,同時也讓Rails開發者扎實掌握Ruby這門語言。我選擇將Ruby語言中的各主題收錄到本書(或者選擇不收錄到本書)是依據我個人的判斷標準:選擇相對重要的內容給那些想正確和高效使用Rails從而學習Ruby語言的人。
對R4R的評論是非常好的。該書填補了一個空白:它不僅是一本純Ruby的書,也不僅是一本純Rails的書,而且是一本可以說是為Rails程序員做過“優化”的Ruby書。我很高興許多人讀完之后問我是否有計劃寫一本完整的只關于Ruby語言的書,并且鼓勵我去寫。
長話短說,于是我就寫了這本書。
這是一本“純Ruby”的書,寫給所有對Ruby感興趣的人。它是R4R的傳承,但不完全是R4R的升級版。它更多地是改編。有些內容與R4R有重疊,但也有很多新內容(事實上比我原先預期的要多)。所有的內容,無論重疊與否,在第1版書交付印刷的時候都已經被潤色和整理,并可以在Ruby 1.9.1版本上運行,這是本書付印時的最新(非常新)版本。
要知道,我的意思并不是說Rails開發者不用讀這本書。恰恰相反,我高興地看到,在R4R出版后的3年里,Rails開發者應該學習Ruby這一觀念已被大眾認可,許多通過學習Rails初次進入Ruby世界的開發者已對Ruby語言自身的魅力產生了興趣。本書就是為他們而寫的,也是為那些通過各種不同的途徑發現Ruby的人而寫的。
不論本書能帶給你什么,我都希望你樂在其中。
致謝
首先要感謝所有我在第1版中感謝過的人。若沒有全體編輯、制作人、審稿人、出版商和同事們,就不會有這本書。
對于第2版來說,我最要感謝的是開發編輯Dan Maharry,他的耐心、支持和指引讓這本書走上正軌,否則不會有這本書。技術開發編輯Andrew Gibson扮演專家的角色,他用專業的挑剔眼光來看整本書,這一點對本書大有裨益。文字編輯Jodie Allen對文字的整體潤色做出了巨大貢獻。技術校對Deepak Vohra認真審查了示例代碼,并及時發現了一些問題。校對Melody Dolab通讀全文并做了修正。
在前期制作中,Kevin Sullivan保持每一件事都按部就班并按期完成。產品經理Mary Piergies再次用極高的專業性引導本書的完成。排版人員Dennis Dalinnik做得非常出色,一切都很順暢。在本書的質檢階段,Katie Tennant提出了許多有價值的見解和建議。
一路走來,一些外部評審員提出了很多意見和批評,這一切使我在撰寫第2版的時候比第1版更加精練,更具可讀性。我要感謝Jason Brown、Marius Butuc、Hector Sansores、Jeffrey Schwab、Doug Sparling、Andrea Tarocchi、Ted Roche和William E. Wheeler。
在第2版寫作期間,David Williams自始至終支持和鼓勵我,是他讓我堅持不懈并保持斗志。在此深表謝意。
和往常一樣,我要感謝松本行弘(Matz)創造了美妙的Ruby語言。順便提一下,若從松本行弘首次公開宣布這個項目之日算起,最近它剛剛過了21歲的生日(2014年2月24日)。讓我特別高興的是,本書第2版出版的時間碰巧大致與這美妙的里程碑吻合。
關于本書
歡迎翻開本書。
Ruby語言由松本行弘(Matz)設計,是一門通用的、面向對象的、解釋型的編程語言。Ruby最早是在1993年發布的。第一個發行的版本在1995年公之于眾,并在20世紀90年代風靡日本。Ruby能夠以相對少的代碼完成較多事務,并且以優雅和視覺流暢的語法和風格著稱,獲得了許多贊譽。事實證明,Ruby在廣泛的編程領域中,從服務器管理腳本到嵌入式設備集成,從Web開發到PDF文檔處理,都是非常有用和高效的。此外,可能有人說Ruby編程技術性不強,但Ruby編程很有趣,它正是按這個思路設計的。正如松本行弘所說,Ruby為編程體驗而優化。確實,因為許多程序員對松本行弘曾做過的同類語言的設計頗有好感,誕生于松本行弘“玩具項目”(pet project)的Ruby語言從一開始就獲得了眾多的關注。
關于Ruby的第一本英文書Programming Ruby(Dave Thomas和Andy Hunt)在2000年年底出版,并因此引領了一波日本之外學習Ruby的浪潮。自從“鎬書”(Pickaxe book)(Thomas和Hunt編寫的Programming Ruby的別名,源于書的封面插圖)出版,Ruby在西方逐步普及。“鎬書”第1版發行4年后,David Heinemeier Hansson發布了Ruby on Rails框架,并由此激發了全世界范圍內學習Ruby的熱情。自2004年以來,Ruby的使用率成指數倍增長,同時增長的還有Ruby的書籍、Ruby用戶組以及Ruby相關的會議和其他活動。
我是一個Rails的開發者和愛好者。同時,我堅信,即使Rails從來沒有出現過,Ruby最終也將被世界“發現”并達到目前Rails時代的規模。Ruby是一門令人非常愉悅和通用的語言,它將永遠像擁有神秘面紗的寶石。我愛上Ruby已近乎14年了,我很高興可以通過寫作和教學將它介紹給許多人,并看到他們中的絕大多數也開心和滿意地擁抱Ruby語言。
這就是我寫這本書的初衷。本書的目的是讓讀者廣泛和深入理解Ruby的工作機制和大量的Ruby技術工具,以及能在實際編程中使用的術語和習語。
本書的組織結構
本書第2版由15章組成,分為3個部分。
- 第一部分:Ruby語言基礎。
- 第二部分:內置類和模塊。
- 第三部分:Ruby動態編程。
第一部分(第1章至第6章)包含Ruby語法以及許多構建關鍵理念和語意的內容:對象、方法、類和模塊、標識符和其他。本書也講述了Ruby編程的生命周期(如何準備、執行代碼文件,并寫出調用多個文件的程序),同時還有Ruby支持的經常使用的許多命令行工具,包括:Ruby的交互式解釋器(irb)、RubyGems包管理器(gem)和Ruby解釋器(ruby)。
第二部分(第7章至第12章)深入講解一些主要的內置類(build-in class),包括字符串、數組、散列、數值、范圍對象、日期對象和時間對象,以及正則表達式,也讓讀者深入了解各種內置工具的用途,以及使用的具體細節。同時也在探索如下問題的過程中構建讀者對Ruby的基礎認知:Ruby中的布爾邏輯、用于轉換對象(如轉換字符串到整型)的內置方法、用于處理集合類型(collection)和枚舉(enumeration)的許多機制,以及比較對象唯一性和相等性的技術。還可以學到關于文件操作和控制臺輸入輸出(I/O)及Ruby程序內部調用系統指令的方法。
第三部分(第13章至第15章)闡述Ruby的動態特性。在這個主題之下存在著很多子議題:其中一些關于元編程技術,包括Ruby運行時反射和對象自省機制,以及賦予對象個性化行為的方式,還有函數、線程、其他可運行可執行對象的處理方法。本書的這一部分還介紹了從Ruby程序中調用系統指令的技術,包括Ruby中由事件觸發的運行時鉤子(hook)和回調(callback),如程序調用不存在的方法時和通過如類繼承及方法定義時的攔截事件。
Ruby語言有完整的系統性,以嚴格的順序閱讀方式闡述這樣的一個系統是一項挑戰。撰寫本書要應對的挑戰是把學習過程看作是一個漸開螺旋,總是建立在熟悉的知識基礎上但又對未知充滿渴求。有時,讀者要為將來的主題給出足夠的留白,那樣就能夠把目前的主題學得更為深入。之后,當必要的知識已儲備完成,就可以回到之前的留白去完成它。本書的設計是為了讓讀者獲得盡可能多的素材,這一目標與真正掌握和持續理解語言的運行機制,從而打下堅實基礎的目標一致。
本書的讀者對象
本書第2版針對讀者進行了優化,其讀者對象是有過編程經驗的,或許甚至是有過Ruby編程經驗并想要學習更多Ruby語言編程技術的人。書中不僅有具體的技術(盡管書中包含的是大量的技術內容),而且也有構成Ruby的設計原理。我對讀者的能力深信不疑,也確信讀者不會每寫一行代碼都要在腦海中進行一次論證,而是會了解如何最大限度地理解編程語言,并且知道出現問題時如何分析。
對一些有針對性的讀者,我需要正視一些問題,因為本書收錄的一些入門性的專題和技術,對于有經驗的開發者來說是很熟悉的。我盡力滿足這部分讀者的喜好,質疑的聲音總是會很快出現,而我相信不時地用幾句話解釋一下術語,就可以讓讀者感覺到極為不同的舒適感和親和力。假如讀者是一個經驗豐富的程序員,看了幾頁后發現這本書是填鴨式的,那么請原諒,畢竟我的初衷是好的。
同樣的道理,如果讀者是第一次涉足編程,準備主動地做一些額外的“家庭作業”,并以此獲得編程能力的大幅提升,那么務必要嘗試一下本書。本書沒有專門介紹編程,而是讓讀者置身于實踐之中,包括創建和運行程序文件,并從基礎出發去闡述Ruby語言。
本書未包含的內容
本書第2版是一本重要的全方位關注Ruby語言的書,但它并不是一本完全的語言參考手冊。有一些核心類(core class)很少提及或未提及,書中討論的標準庫的包數量有限,這是設計使然。讀者并不需要本書詳細地說明怎樣使用每一個標準庫API,我也不會這樣做。在所有的可能中,讀者可能需要的是有人可以準確地解釋class << self的含義,或者為什么兩個實例變量分寫在兩行卻不是同樣的變量,或者單例方法和私有方法之間的差別,還有什么是枚舉器(enumerator)以及它和迭代器(iterator)的區別。讀者需要知道上面所說的種種,也需要看到它們所起的作用并開始使用它們。當然,也有必要為了工作中使用Ruby而去深入地了解標準庫,我確實鼓勵這樣做。我的目的是讓讀者對本書有著獨特的和不同程度的理解。
關于Ruby的版本
本書第2版覆蓋了Ruby語言2.1版本的內容,這也是寫本書時的最新版本。Ruby 1.9版本仍然在廣泛使用中,但我預測它將不會使用太長的時間。如果讀者仍然在使用Ruby 1.9版本,也將會從書中得到很多有價值的信息,但在不遠的將來有可能嘗到Ruby 2的不同“風味”。
編碼命名規范、示例和下載
在正文中,Ruby變量和常量的名稱都使用等寬字體。當類和模塊的名稱表示直接引用現有類或模塊的對象時,也使用等寬字體。例如,“下一步,我們將重新打開Person類定義塊。”凡類和模塊的名稱用在更為狹義的地方,這個名稱就使用正常字體,如“現在我們需要一個Array的實例”。不管在什么樣的情況下,讀者能夠通過上下文,對本書中出現的類、模塊及Ruby的其他實體的命名加以區分。
本書中示例所使用的源碼可以從如下地址下載:www.manning.com/black3或者www.manning.com/TheWellGroundedRubyist-SecondEdition。
直接用于執行的程序和作為命令行的程序,如ruby和rails,它們的名稱使用等寬字體。
斜體或星號用作通配符表達式。例如,to_*可能指向Ruby一般類型的方法,包括to_i和to_s,而position_match可能相應指向的方法卻是post_match或者pre_match。
可以把書中的代碼示例放到一個文本文件中,然后用ruby命令獨立運行它們,也可以把它們輸入交互式Ruby解釋器(irb)中運行。在第1章中,會學到這些技術。隨著對本書的深入閱讀,我們將假定讀者可以獨立運行程序,書中若沒有給過對文件名的建議(或者讀者喜歡不同的名稱),讀者也可以為示例文件命名。
書中大量的例子都是以irb會話的形式展現的。讀者在書中看到的代碼,是在用irb運行代碼的實時會話中剪切粘貼過來的,所以很容易辨認出這樣的格式(特別是讀者開始使用irb的時候)。這樣的表達方式對于較短的代碼片段和表達式來說尤其適合,并且無論讀者輸入什么(它甚至像是一個計算器),irb總是會輸出執行的結果,這可以減少為了看到輸出結果而使用print指令的次數。
在其他的代碼示例中,代碼的輸出結果被安排在示例之后分別印刷,或者伴隨代碼示例印刷(清晰地標注為輸出部分),或者嵌在代碼段之后的敘述之中。
在一些示例旁會伴隨出現標有數字的球形符號。這些球形符號關聯到之后敘述的具體要點,并讓讀者可以在敘述中快速回查。
命令行程序的調用使用美元符號($)作為提示符,它通常是類UNIX環境中普遍使用的shell提示符。這些命令大多數可以在Windows上運行,只是提示符可能會不同(在所有的系統環境中,命令的可用性總是依賴于在系統環境變量中設置相對路徑)。
盡管在其他領域中,我遵從W3C的指南使用“Web”,在這里我使用“Web”來表示萬維網。
作者在線
購買本書第2版后,讀者可以免費訪問Manning出版社運營的私有Web論壇,在那里可以評論本書、咨詢技術問題、得到作者和其他用戶的幫助。訪問論壇和訂閱論壇,請瀏覽如下任意網站:
www.manning.com/TheWellGroundedRubyistSecondEdition
www.manning.com/black3
這個頁面介紹了注冊后如何訪問論壇、可以得到什么幫助以及論壇上的行為規則。Manning承諾為讀者之間、讀者與作者之間提供一個可以對話的場所,但因作者在論壇上的貢獻都是自愿的(不收費的),所以不會強制作者參與。為使作者感興趣,提高其參與度,我們建議讀者提一些具有挑戰性的問題。
只要本書依然在售,讀者就可以從出版社網站訪問作者在線論壇(The Author Online forum)和之前討論話題的存檔文件。
關于封面圖畫
本書封面上的插畫是一位法國貴族或者說是一個法國貴婦人。這張插畫取自Sylvain Maréchal①在1805年印刷的關于地域服飾風俗的4部畫卷綱要。這本書于1788年(即法國大革命前一年)在巴黎首次發布。每一張插畫都手工上色。
Sylvain Maréchal色彩繽紛的圖集喚醒我們對近200年前世界不同地域文化獨立性的思考。他們曾彼此隔絕,人們說著不同的方言和語言。從鄉下到市區,通過他們的著裝很容易辨認出他們生活的地方、他們經營的生意以及身份。時過境遷,那時如此豐富的地域著裝規范以及多樣性已不復存在。現今就連不同的國家都很難從服飾上進行分辨,更不必說城市和地區了。或許,我們用文化的多樣性換取了更為豐富多彩的個人生活,這無疑是一種更為多元化的,也是更為快節奏的科技生活。
現今,計算機圖書層出不窮,Manning出版社用兩個世紀之前富有多樣性地域生活的插畫作為書的封面,以此來慶祝IT行業日新月異的發明和創造力,并讓Sylvain Maréchal的插畫得以重現。
① Sylvain Maréchal(1750—1803):法國散文作家、詩人、哲學家。維基百科http://en.wikipedia.org/wiki /Sylvain_Mar %C3%A9chal。——譯者注
本文僅用于學習和交流目的,不代表異步社區觀點。非商業轉載請注明作譯者、出處,并保留本文的原始鏈接。
目錄
前言
第一部分 Ruby語言基礎
第1章 進入Ruby的世界
1.1節進入Ruby的世界
1.2節剖析Ruby的安裝
1.3節Ruby擴展和編程庫
1.4節易用的Ruby工具和應用程序
1.5節小結
第2章 對象、方法和局部變量
第3章 使用類組織對象
第4章 模塊和程序組織
第5章 默認對象(self)、作用域和可見性
第6章 控制流技術
第二部分 內置類和模塊
第7章 內置要點
第8章 字符串、符號和其他標量對象
第9章 集合和容器對象
第10章 集合類型核心: Enumerable和Enumerator
第11章 正則表達式和基于正則表達式的字符串操作
第12章 文件和I/O操作
第三部分 Ruby動態編程
第13章 對象的個性化
第14章 可調用和可運行對象
第15章 回調、鉤子和運行時自省
**
歡迎來到異步社區!
**
總結
以上是生活随笔為你收集整理的《Ruby程序员修炼之道》(第2版)目录—导读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bash 中的特殊字符大全
- 下一篇: 《Adobe Illustrator C