Python用了一陣子下來,個人覺得其語法的縮排雖然是為了精簡程式碼,省去括號的使用。但這也是常讓我困擾的地方,其它方面倒是沒什麼意見。因為OpenStack 的關係,現在企業開始有一些Python及OpenStack 的人力陸續開出來.
Ruby 語法上真的很吸引人,短短兩三天它就讓我著迷。若不是工作的關係真的不會想主動去學它,但學了就會愛上它,只可惜它的競爭對手太多了,近年來Scala及JavaScript 的火紅多少影響它的發展。特別是JavaScript ,在Node.js 技術出來之後讓Web 前後台開發的語言統一了,這真是Web 開發工程師的一大福音.
接下來列幾個自己覺得Ruby 語法對學過其它語言轉過來的人要特別注意的地方:
語法中程式區塊省去括號的使用:
if ....
puts 'Hello'
puts 1+2
end
class Car
def run
end
end
case ...
...
when ...
...
end
for num in (1..3)
puts num
end
字串與數字的串接 :
irb(main):001:0> s1 = 'Hello'
=> "Hello"
irb(main):002:0> puts s1 + 100
TypeError: can't convert Fixnum into String
irb(main):003:0> puts s1 + 100.to_s
Hello100
=> nil
就以上的程式片斷來看,和其它語言不同的是數字與字串不能直接串接, 需要先將數字轉成字串.
陣列元素型態與相加:
Ruby陣列中的元素可以是不同資料型態
Ruby兩個陣列可以使用加號(+) 直接串接形成一個合併後的新陣列
類別/繼承/存取控制:
class Child < Parent
def print
puts 'I am Child'
end
def dump
end
private : dump
end
Ruby 的類別沒有多重繼承, class 間的繼承使用一個小於(<) 符號,夠簡單也夠簡潔. method 預設是 public ,不需像Java那樣前面加個 public 來宣告. 但 private method 就得特別宣告
變數:
Ruby 變數不需要宣告型別,但變數名稱第一個字元卻可以很容易區分其範圍(scope)
$ 全域變數 (global variable)
@ 實例變數 (instance variable)
[a-z] 或 _ 區域變數 (local variable)
[A-Z] 常數
註解(comment):
單行註解使用 # 開頭
多行註解使用 =begin 開始, =end 結束,這點倒是不太簡潔
Ruby 還有一堆方便簡潔的語法, 等有空再整理,也當做自己的備忘錄.