2月
14
2007
分類:
最近更新:
2007-02-14
To Ruby From PHP, 中譯
PHP 普遍應用於 web 應用軟體環境中,但若你想用 Ruby on Rails 或只是想找一個更適於處理廣泛用途的語言, Ruby 值得看看。
相似處
如同 PHP, 在 Ruby 中...- Ruby 跟 PHP 一樣用動態分型。所以你不需要擔心變數宣告之類的事。
- 有類別,並且你可以控制存取權限一如 PHP 5 的方式 (public, protected and private)。
- 有些變數名稱與 PHP 一樣是用 $ 開頭,但非全部。
譯註: PHP 規定所有變數名稱都以 $ 開頭; Ruby 則將特殊符號 $,#,@ 置於變數名稱前以識別變數用途,例如 $ 開頭的變數即全域變數。 - 也有 eval.
- 可用字串竄寫。以 "#{foo} is a #{bar}" 之形式替代 "$foo is a $bar" 。如同 PHP ,這不會作用於單引號括起的字串。
譯註: PHP 同樣有 "${foo} is a ${bar}" 或 "{$foo} is {$bar}" 的語法。 - 有 heredocs 語法。
譯註: 參考 PHP Manual::Language Reference::Types::Strings::Heredoc - 有例外處理機制。
- 有相當龐大的標準類別庫。
- 只需將 array( ) 語法改成 { } 語法,如 array('a' => 'b') 改為 {'a' => 'b'} ,陣列和雜湊表就能如預期般作用。
譯註: PHP 中稱雜湊表 (hashes) 為關聯索引陣列 (associative arrays) 。 - true 和 false 的作用同 PHP ,但 null 改稱 nil 。
相異處
不像 PHP, 在 Ruby 中...- 堅固型別。你需要利用 to_s, to_i 等轉換字串、整數等型態,而非依賴程式語言代為處理。
- 字串、數值、陣列等等都是個體。以 -1.abs 替代 abs(-1) 的調用形式。
- 在調用行為的敘述中,圓括號是選用的。除非要釐清哪個參數要傳給哪個行為。
- 標準類別庫和擴充件以組件和類別組織名稱,取代底線字元等命名慣例。
- 自識 (反射) 是個體與生俱來的能力,不需要如 PHP5 般使用 Reflection classes 。
譯註: Reflection 其實是 Java/C# 等缺乏個體自識能力之語言才有的詞彙。因為它們的個體不具自識能力,當一個體欲觀察自身輪廓時,必須先配置另一個可反射對象輪廓的個體,該個體才能藉由觀察反射體而得知自身輪廓。而 Ruby 中的個體,不需要藉助其他個體反射自身就能察知自身輪廓。 - 變數都是參照。
- 沒有抽象類別或介面。
譯註: Ruby 用所謂 mixin 的實踐方式。 - 雜湊表和陣列不可互換。
譯註: PHP 允許數字索引和關鍵字索引混用在同一個陣列中。 - 在條件式中,只有 false 和 nil 為「偽」; 0, 空陣列和空字串為「真」。
- 幾乎一切動作都是行為調用,包括 raise (PHP 的 throw) 。
原文: To Ruby From PHP
最近在學 Ruby 和 Python ,覺得這篇文章淺顯地點出了幾個差異,有助於節省學習時間,所以順手翻譯。有一個中文使用者架設的 RubyWiki: RubyTW Wiki 。原本想順手把這篇中譯加上去。可惜他們用的文件授權條款是 CC ,而我用的授權條款是 GPL/GFDL ,所以就不加了。
相關文章
樂多舊網址: http://blog.roodo.com/rocksaying/archives/2726947.html
樂多舊回應