最近更新: 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

樂多舊回應
zusocfc@gmail.com(CFC) (#comment-3981791)
Thu, 15 Feb 2007 17:06:21 +0800
Hi, 我是CFC
關於文章授權方式,事實上是如果作者本身沒有聲明的話,是採用C.C.授權
可是如果作者自己有別的授權方式
作者可以自己加上說明的
我們也尊重作者:)
未留名 (#comment-3985487)
Thu, 15 Feb 2007 23:43:56 +0800
我不排斥 CC ,只是我留意到你們預設採 CC Attribution-NonCommercial-ShareAlike 2.5 。我的最大底限是 Attribution-ShareAlike ,多了個 NonCommercial 就沒辦法了,只好維持用 GFDL 。

繼續學 Ruby 去囉。
zusocfc@gmail.com(CFC) (#comment-3985971)
Fri, 16 Feb 2007 01:02:27 +0800
歡迎來我們的討論區一起聊天學Ruby :D
http://groups-beta.google.com/group/rubytw