動態類型檢查

2009 年 6 月 2 日

最近,我們的一些開發人員遇到指控,指稱使用像 ruby 這樣的動態語言,你會使用如此多的動態類型檢查,以至於你最終會有效地撰寫自己的類型系統。因此他們想,既然我們已經撰寫了許多真正的 ruby 程式碼,我們有多常進行動態類型檢查?Michael Schubert 蒐集了資料。

下表包含資料。我們將動態類型檢查定義為使用下列方法:is_a?kind_of?instance_of?。程式碼行來自 rails 中的標準 rake 統計指令。

專案 ID程式碼類型檢查程式碼 LOC測試類型檢查測試 LOCLOC / 類型檢查測試 LOC / 程式碼 LOC
A16133180985614480.7
B141913801712325900.9
C02607029811.1
D74265340698331.0
E3229619609768813843.3
F18~9500N/AN/A528N/A
G02455032901.3
H92220664045752.9
I23106332123319191.2
J1964046124885115862.2
K175769698486791.7

這些資料的寓意是,你不應該期望在你的 ruby 程式碼庫中看到許多類型檢查呼叫。當然,這適用於任何動態語言。在我待過的小型談話圈中,這通常被認為是不良的形式。

此資料中檢查的方法並非唯一可被視為動態類型檢查的方法。其他情況包括 respond_to?aClass === anInstance。我們的團隊認為,這些情況並不少見於他們檢查的情況。

大多數使用情況都是處理自由輸入,例如方法參數可以是字串、符號或陣列。這些情況出現在 DSL 類似的情況中,你希望自由輸入以提高可讀性。