Ruby-初印象

跟很多編程語言相比,Ruby是一名新秀了,加上Ruby生於日本,所以即使語言本身並無東亞文字的印記,但是資料還是相對較少。在接觸Ruby的過程中,我感覺這門語言裏擁有和許多腳本語言的印跡,覺得蠻有意思,所以摘錄一些,算是一個筆記來。

 

動態類型

類似語言:Shell,AWK, PHP

應用說明:無需聲明變量類型,根據變量/對象被賦值或構建的類型,即可進行引用。動態類型有一個有趣的名字:鴨子類型,聽說是來自一句古代的熟語:““當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這隻鳥就可以被稱爲鴨子。”。鴨子類型像是把靜態類型語言中的RTTI工作完全內置到語言支持中了。在這一點上,Ruby和AWK都做得更徹底或者更靈活,它們會根據表達式中參與運算的操作數們的類型類確定最佳的數據類型,然後執行運算,而Shell則需要用特殊的形式($(()))來包裹一個表達式,PHP看到加號,就只把操作數解釋爲數字類型,如果遇到兩個看起來不像數字的字符串變量相加時,便把不能轉換的變量值統一解釋爲0。

 

引號內的表達式

類似語言:Shell,PHP

應用說明:#{variableor expression},不過,在Shell和PHP裏面,最前面是$符號而不是#符號。和其它兩位前輩一樣,單引號裏的表達式或轉義字符得不到解釋,比兩位前輩不同的是,Ruby單引號和雙引號還有可否插值之分,前者不能,而後者可以。另外,StackOverflow上還有人提到某些情況下,雙引號字符串的使用在時間性能上比單引號要好一點,表示不解。

 

BEGIN塊和END塊

類似語言:AWK

應用說明:適用於任務執行前的全局初始化和任務執行後的清理或彙總顯示工作。BEGIN 塊中的代碼在所有代碼執行之前執行,Ruby 還允許設置多個 BEGIN / END塊並按出現的順序執行塊中的代碼,有一點需要注意,就是塊中的左花括號要和BEGIN/ END關鍵字在同一行,否則會出現parse error。


超全局變量

類似語言:PHP

應用說明:如__FILE__(當前文件名),  __LINE__(當前執行語句在文件裏的行號),這些變量的存在,能夠方便地自動記錄當前環境的屬性。

 

多行字符串

類似語言:PHP

應用說明:在處理多行字符串又需要換行來提高可讀性時,HEREDOC還是比較方便的。

 

縮進和語句結束符

類似語言:Python,Shell

應用說明:無需花括號,通過縮進來表達順序和層次關係;無需分號,通過表達式之間的空白字符來確定一條語句,個人覺得,這個特性無所謂優劣。

 

註釋標記符

類似語言:Shell

應用說明:雖然註釋不影響程序的邏輯,但是我覺得以#號作爲註釋標記,使得Ruby和腳本語言看起來真的就是近親。

 

可能也因爲是後輩,Ruby才得以吸收借鑑衆多前輩們的各種特性和風格。

然而,松本行弘Ruby,與其說是融合了各家語言的一些特性,不如說是懷着一種與前人完全不同的角度來審視人類和人類所造的自動化工具的關係,正如作者所說的:“我們需要從人的角度考慮問題,人們怎樣編寫程序或者怎樣使用機器上應用程序。我們是主人,他們是僕人”。哈哈,果然日本連攻城獅的主僕觀念要強烈一點。

至於松本行弘有沒有真的重新審視這種關係,我想在以後學習和使用Ruby的過程中會慢慢有自己的體會。

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章