天天看點

《Ruby程式員修煉之道》(第2版)目錄—導讀

《Ruby程式員修煉之道》(第2版)目錄—導讀

版權

ruby程式員修煉之道(第2版)

• 著    [美] david a. black

  譯    鐘鳳鳴 陳雪靜

  責任編輯 楊海玲

• 人民郵電出版社出版發行  北京市豐台區成壽寺路11号

  郵編 100164  電子郵件 [email protected]

• 讀者服務熱線:(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的插畫得以重制。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

目錄

第一部分 ruby語言基礎

<a href="https://yq.aliyun.com/articles/90672">第1章 進入ruby的世界</a>

<a href="https://yq.aliyun.com/articles/90672">1.1節進入ruby的世界</a>

<a href="https://yq.aliyun.com/articles/90680">1.2節剖析ruby的安裝</a>

<a href="https://yq.aliyun.com/articles/90684">1.3節ruby擴充和程式設計庫</a>

<a href="https://yq.aliyun.com/articles/90703">1.4節易用的ruby工具和應用程式</a>

<a href="https://yq.aliyun.com/articles/90706">1.5節小結</a>

第2章 對象、方法和局部變量

第3章 使用類組織對象

第4章 子產品和程式組織

第5章 預設對象(self)、作用域和可見性

第6章 控制流技術

第二部分 内置類和子產品

第7章 内置要點

第8章 字元串、符号和其他标量對象

第9章 集合和容器對象

第10章 集合類型核心: enumerable和enumerator

第11章 正規表達式和基于正規表達式的字元串操作

第12章 檔案和i/o操作

第三部分 ruby動态程式設計

第13章 對象的個性化

第14章 可調用和可運作對象

第15章 回調、鈎子和運作時自省

**

歡迎來到異步社群!

繼續閱讀