天天看點

《Effective Ruby:改善Ruby程式的48條建議》一導讀

《Effective Ruby:改善Ruby程式的48條建議》一導讀

學習一門新的程式設計語言通常需要經過兩個階段。第一階段是學習這門程式設計語言的文法和結構。如果我們具有其他程式設計語言的經驗,這個階段通常隻需要很短的時間。以ruby為例,接觸過其他面向對象語言的程式員對ruby的文法也會比較熟悉。有經驗的程式員對于語言的結構(如何根據文法建構應用程式)是很熟悉的。

在第二階段則需要更多的努力。這個階段也是你深入語言、學習語言風格的時候,許多程式設計語言在解決常見的問題時都使用了獨一無二的方法,ruby也不例外。比如循環,ruby沒有使用顯式循環體來實作,而是使用了代碼塊和疊代器模式。學習如何突破思維定勢,用ruby的方式解決問題是這個階段的精髓。

本書也将緻力于程式設計語言學習的兩個階段。但本書并不是一本程式設計語言的入門級書籍。如果你已經完成了第一階段,即文法和結構的學習,通過本書你将會對ruby的了解更加深入和全面,編寫出更具可讀性、可維護性的代碼。在這個過程中,我也會介紹ruby解釋器的内部工作原理,并分享編寫更高效程式的相關知識。

ruby的不同實作和不同版本

如你所知,ruby有一批非常活躍的社群貢獻者。他們負責各種各樣的項目,其中也包括ruby解釋器的不同實作。除了大家熟知的ruby官方實作(mri),我們也有很多其他的選擇。想把ruby應用程式部署到已配置java環境的機器?沒問題,這就是jruby的用武之地。那ruby應用程式是否支援智能手機和平闆電腦呢?當然,同樣也有一款相應的實作。

可以選擇的ruby實作有多種,這也證明了ruby的活躍性。雖然每種的内部實作都不一樣,但對ruby程式員來說無需太過擔心,因為這些解釋器的行為和官方的mri很接近。

本書介紹的很多方法在不同ruby實作上都是通用的,但也有一些隻針對mri版本,諸如書中提及的垃圾回收機制。本書中指定ruby特定版本的時候,都是針對mri版本的。

書中所有代碼适用于ruby 1.9.3及其後的版本。在本書編寫時,ruby最新版本是2.1,ruby 2.2即将面世。若書中未提及特定的ruby版本,則示例代碼可在所有支援的版本上運作。

關于代碼風格的注釋

<a href="https://yq.aliyun.com/articles/108175">第1章 讓自己熟悉ruby</a>

<a href="https://yq.aliyun.com/articles/108180">第1條:了解ruby中的true</a>

<a href="https://yq.aliyun.com/articles/108186">第2條:所有對象的值都可能為nil</a>

<a href="https://yq.aliyun.com/articles/108188">第3條:避免使用ruby中古怪的perl風格文法</a>

<a href="https://yq.aliyun.com/articles/108191">第4條:留神,常量是可變的</a>

<a href="https://yq.aliyun.com/articles/108195">第5條:留意運作時警告</a>

<a href="https://yq.aliyun.com/articles/108344">第2章 類、對象和子產品</a>

<a href="https://yq.aliyun.com/articles/108353">第6條:了解ruby如何建構繼承體系</a>

<a href="https://yq.aliyun.com/articles/108358">第7條:了解super的不同行為</a>

<a href="https://yq.aliyun.com/articles/108364">第8條:初始化子類時調用super</a>

<a href="https://yq.aliyun.com/articles/108368">第9條:提防ruby最棘手的解析</a>

<a href="https://yq.aliyun.com/articles/108372">第10條:推薦使用struct而非hash存儲結構化資料</a>

<a href="https://yq.aliyun.com/articles/108376">第11條:通過在子產品中嵌入代碼來建立命名空間</a>

<a href="https://yq.aliyun.com/articles/108385">第12條:了解等價的不同用法</a>

<a href="https://yq.aliyun.com/articles/108388">第13條:通過"&lt;=&gt;"操作符實作比較和比較子產品</a>

<a href="https://yq.aliyun.com/articles/108394">第14條:通過protected方法共享私有狀态</a>

<a href="https://yq.aliyun.com/articles/108399">第15條:優先使用執行個體變量而非類變量</a>

第3章 集合

第16條:在改變作為參數的集合之前複制它們

第17條:使用array方法将nil及标量對象轉換成數組

第18條:考慮使用集合高效檢查元素的包含性

第19條:了解如何通過reduce方法折疊集合

第20條:考慮使用預設哈希值

第21條:對集合優先使用委托而非繼承

第4章 異常

第22條:使用定制的異常而不是抛出字元串

第23條:捕獲可能的最具體的異常

第24條:通過塊和ensure管理資源

第25條:通過臨近的end退出ensure語句

第26條:限制retry次數,改變重試頻率并記錄異常資訊

第27條:throw比raise更适合用來跳出作用域

第5章 元程式設計

第28條:熟悉ruby子產品和類的鈎子方法

第29條:在類的鈎子方法中執行super方法

第30條:推薦使用def?ine_method而非method_missing

第31條:了解不同類型的eval間的差異

第32條:慎用猴子更新檔

第33條:使用别名鍊執行被修改的方法

第34條:支援多種proc參數數量

第35條:使用子產品前置時請謹慎思考

第6章 測試

第36條:熟悉單元測試工具minitest

繼續閱讀