綠色框框為單一個運算元,紅色框框為兩個運算元,藍色框框為三個運算元。
單一運算元就構成一個運算式,運算元可以是變數 (variable) 、字面常數 (literal) 或呼叫方法 (method) ,例如
a # 以變數當運算元 3 # 以字面常數當運算元 puts # 呼叫方法
運算式,顧名思義,其為運算出一個結果的式子,因此單一運算元的運算式所得到的結果就是運算元的值,如果是方法呼叫,就是方法的回傳值 (return value) 囉!
單一運算元也可以結合單元運算子,單元運算子有
運算子 | 功能 | 範例 |
---|---|---|
+ | 正 | +a |
- | 負 | -a |
! | 邏輯補數運算子 | !a |
正負如果一般數學表示正負值一樣,同樣的,負負會得正
a = -3 b = +a # b 會等於 -3 c = -a # c 會等於 3
邏輯補數運算子會把 true 變成 false , false 變成 true
a = true b = !a # b 會等於 false c = !b # c 會等於 true
一般運算子都須結合兩個運算元,例如算術運算子 (arithmetic operator) 可用在整數 (integer) 及浮點數 (floating-point number) ,計算結果也為整數或浮點數
運算子 | 功能 | 範例 |
---|---|---|
+ | 加 | a + b |
- | 減 | a - b |
* | 乘 | a * b |
/ | 除 | a / b |
% | 取餘數 | a % b |
** | 指數 | a ** b |
例如
a = 2 b = a + 2 # b 會等於 4 c = b - 2 # c 會等於 2 d = c * 2 # d 會等於 4 e = d / 2 # e 會等於 2 f = e % 2 # f 會等於 0 g = f ** 2 # g 會等於 0
+ 與 * 也可用於字串 (string) ,例如
a = "a" b = a + "b" # 字串連接, b 會等於 "ab" c = a * 2 # 字串重複, c 會等於 "aa"
相等性及關係運算子 (equality and relational operator) 的結果得到布林值 (Boolean value) ,不是 true 就是 false
運算子 | 功能 | 範例 |
---|---|---|
== | 相等 | a == b |
!= | 不相等 | a != b |
> | 大於 | a >= b |
>= | 大於等於 | a >= b |
< | 小於 | a < b |
<= | 小於等於 | a <= b |
<=> | 大於回傳 1 ,等於回傳 0 ,小於回傳 -1 | a <=> b |
=== | 完全相等 | a === b |
例如
a = 11 b = 22 c = a >= b # c 會等於 false d = a <= b # d 會等於 true e = c == d # e 會等於 false f = a != b # f 會等於 true
我們運用的等號,其實屬於指派運算子 (assignment operator) ,所謂的指派是把等號右邊的值給左邊的變數 (variable)
運算子 | 功能 | 範例 |
---|---|---|
= | 指派 | a = b |
+= | 相加同時指派 | a += b |
-= | 相減同時指派 | a -= b |
*= | 相乘同時指派 | a *= b |
/= | 相除同時指派 | a /= b |
%= | 取餘數同時指派 | a %= b |
**= | 取指數同時指派 | a **= b |
例如
a = 2 a += 2 # a 會等於 4 a -= 2 # a 會等於 2 a *= 2 # a 會等於 4 a /= 2 # a 會等於 2 a %= 2 # a 會等於 0 a **= 2 # a 會等於 0
也可以用平行指派 (parallel assignment)
a, b, c = 11, 22, 33 # a 會等於 11 # b 會等於 22 # c 會等於 33
有沒有看的眼花撩亂?居然有 f = a != b 之類的式子出來,這是因為運算子有計算的優先次序 (precedence) ,由於 != 的優先順序在 = 之前,所以 a != b 會先被計算,結果才會指派到 f 之中。如果不是很清楚各個運算子的優先次序,保險一點的做法可以用小括弧,先把要先被計算的運算式圍起來,例如
f = (a != b) # 等於 f = a != b
這是因為小括弧有最高的優先計算次序。
基本上運算式就是程式 (program) 中獨立的陳述 (statement) ,通常一行程式碼只會放一個陳述。 Ruby 程式的執行單位就是陳述,由前而後,一個陳述接著一個陳述來執行。
然而許多控制結構 (control structure) 是屬於多行的複合陳述 (compound statement) ,我們先來看看控制結構中的選擇吧!
中英文術語對照 | |
---|---|
運算式 | expression |
運算元 | operand |
運算子 | operator |
變數 | variable |
字面常數 | literal |
方法 | method |
回傳值 | return value |
算術運算子 | arithmetic operator |
整數 | integer |
浮點數 | floating-point number |
字串 | string |
相等性及關係運算子 | equality and relational operator |
布林值 | Boolean value |
指派運算子 | assignment operator |
變數 | variable |
平行指派 | parallel assignment |
計算的優先次序 | precedence |
程式 | program |
陳述 | statement |
控制結構 | control structure |
複合陳述 | compound statement |
您可以繼續參考
基礎篇
相關目錄
回 Ruby 入門指南
回 Ruby 教材
回首頁
參考資料
http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html
http://www.tutorialspoint.com/ruby/ruby_operators.htm
沒有留言:
張貼留言