The Ruby Programming Language Notes

來源:互聯網
上載者:User
文章目錄
  • 關於風格
  • 關於動態
  • 關於結構
  • 其它
  • 慣用法

/****************************************

按名稱調用

一切都是對象, 且永不關閉

鉤子無處不在

yield/block/proc/lambda, 一等公民

符號與雜湊

模組/類/執行個體, 隨意組裝

****************************************/

 

關於風格

 

不會區分什麼 primitive type 和 class type

類和對象永不關閉, 你可以隨時為現存的類添加各種方法, 讓其表達能力/可讀性更強 (3.hours 而不是 Time.hours(3))

符號, 完美的標識

雜湊表字面構造, 類比具名引數

簡約而不簡單, 數組和雜湊幾乎主宰一切.

參數列表, 括弧可省略

Block參數, 就地擴充, 無需繼承或定義單獨的函數. (消除了 Java 中匿名內部類的需要)

Proc是一級公民, 對象式和函數式的完美結合

 

關於動態

 

按名稱調用, Duck Typing, 而不是按類型: 我接觸的兩種動態語言 Python和Ruby 都是這個樣子的. 繼承在這類語言中徹底淪為代碼複用的一種可選手段, 而不是什麼物件導向的核心機制. 物件導向的本質特徵其實就是一個多態.

按名稱調用, 就是運行時的泛型. (從C++程式員的觀點來看)

類和對象永不關閉, 你可以隨時為你的類和對象添加它原本不支援的行為

執行過程中的鉤子, 關鍵的步驟你都可以鉤入你的代碼. 最廣泛使用的 method_missing.

任何語句幾乎都是函數調用, 都在運行時被解釋.

解譯器層級的原語, 如 send(:method_name), response_to?(:method_name), block_given? frozen? 等

解譯器層級的知識, 或中繼資料, 關於對象的一切資訊

任何已有函數都可以重定義, 包括操作符. (全域範圍內的影響, 最好不要重定義核心類的方法)

 

關於結構

 

類和對象永不關閉

用模組對概念/能力/行為建模, 用模組來組裝類.

模組, 其實就是泛型演算法. (從C++程式員的觀點來看)

Duck Typing, 就是 模板 中的 Concept, 對參數在"能力"方面而不是"類型"方面的要求 (從C++程式員的觀點來看)

container/iterator/block, 與 STL 的 container/iterator/functor 類似, 只不過一個是語言層級的支援, 一個是類庫層級的支援, 一個是與生俱來, 一個是後天發明, 對使用者的影響也是差別巨大, 只能說STL來的太晚了

在動態語言中, 類型只是設計時組織代碼邏輯, 對問題建模的一種方式, 運行時則無關緊要. 傳統的介面, 物件導向的核心概念之一, 變得可有可無. 原先的介面繼承和實現繼承, 也只剩實現繼承在發揮作用, 而 mixin, 則相當於多重實現繼承的實現.

繼承在異常體系中發揮作用, 是因為有時只需要 rescue 整個層次. (關於異常處理, 沒有其它的方法來代替繼承嗎?)

 

其它

 

.freeze, const, 完全自動化的unmodifiedList, unmodifiedMap...

method(:method_name), instance_method(:method_name), 擷取函數指標, 然後綁定到不同對象.

protected, private 是控制到對象的

Proc 和 lambda. 目前的版本, Proc 和 lambda 都是閉包, 但Proc裡面的return, 像 C/C++ 中的Macro中的return, 會跳出調用者函數體.

並行賦值 a, b = b, a

預設參數可引用前面參數

Range, 曾被收錄於<<分析模式>>, 估計被實現了無數次, Ruby終於內建支援

yield: 用來實現 Iterator, Template Method

block, proc, lambda: 可用作 Command, Strategy 的載體

指派陳述式的值總是參數的值, 而不是方法的傳回值

不會自動為屬性賦值函數加self.首碼, 只會把它當作局部變數

 

慣用法

 

使用以符號為key的hash做參數, 以便類比 keyword argument

類內優先使用self,不用類名

查詢方法要帶? ,  修改方法要帶 !

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.