下記の算術演算子が定義されています。
+a # 正数 -a # 負数 a + b # 加算 a - b # 減算 a * b # 乗算 a / b # 除算 a % b # a を b で割った余り a ** b # a の b 乗
Ruby には a++ や ++a のような加算子(インクリメント)、減算子(デクリメント)はありません。代わりに +=, -= を用います。
a += 1 # a の値をひとつ加算する a -= 1 # a の値をひとつ減算する
文字列を連結するには、+ を用いる方法と <> を用いる方法があります。後者の方が高速です。
str1 + str2 # 文字列str1とstr2を連結(遅い、str1自体は変更無し) str1 << str2 # 文字列str1とstr2を連結(高速、str1自体が変更される) str1 * n # 文字列str1を n回繰り返した文字列
% は、printf() のフォーマットで引数を整形します。
puts "%d" % 127 #=> 127 puts "%x" % 127 #=> 7f puts "%o" % 127 #=> 177 puts "[%5d]" % 127 #=> [ 127]
下記のビット演算子が定義されています。
~a # a の否定(1は0、0は1) a & b # ビット積(aもbも1のビットが1) a | b # ビット和(aまたはbが1のビットが1) a ^ b # 排他的論理和(aまたはbどちらかが1の時のみ1) a << b # b ビット左シフト a >> b # b ビット右シフト a[n] # nビット目が立っていれば1、さもなくば0
下記の代入演算子が定義されています。
a = b # a に b を代入する a += b # a = a + b に同じ a -= b # a = a - b に同じ a *= b # a = a * b に同じ a /= b # a = a / b に同じ a %= b # a = a % b に同じ a **= b # a = a ** b に同じ a &= b # a = a & b に同じ a |= b # a = a | b に同じ a ^= b # a = a ^ b に同じ a <<= b # a = a << b に同じ a >>= b # a = a >> b に同じ a &&= b # a && (a = b) に同じ a ||= b # a || (a = b) に同じ
下記の比較演算子が定義されています。
a == b # a と b が等しい a != b # a と b が等しくない a < b # a が b よりも小さい a > b # a が b よりも大きい a <= b # a が b 以下である a >= b # a が b 以上である
<=> 演算子は、a < b であれば -1、a == b であれば 0、a > b であれば 1、比較できない時は nil を返します。
a <=> b
=== 演算子は、case文のマッチングで用いられる比較を行います。例えば数値(Numeric)の場合は数値が等しいか、範囲(Range)の場合はその範囲内にあるか、正規表現(Regexp)の場合は正規表現にマッチするか、モジュール(Module)の場合はオブジェクトがサブクラスのインスタンスであるかどうかなどが判断されます。
if 5 === 5 then # Numeric puts "OK" end if (1..10) === 5 then # Range puts "OK" end if /[a-z]/ === "a" then # Regexp puts "OK" end if String === "a" then # Module puts "OK" end
下記の論理演算子が定義されています。
!a # a が false であれば a && b # a かつ b が true であれば a || b # a または b が true であれば not a # a が false であれば a and b # a かつ b が true であれば a or b # a または b が true であれば
? : は三項演算子と呼ばれます。
a ? b : c # a が真であれば b さもなくば c
配列(Array)に関しては、下記の演算子が定義されています。
arr1 + arr2 # arr1 と arr2 を連結した配列 arr1 - arr2 # arr1 から arr2 の要素を取り除いた配列 arr1 * n # arr1 の各要素を n 回繰り返した配列 arr1 * sep # arr1 の各要素をセパレータ sep で連結した文字列 arr1 & arr2 # arr1 と arr2 双方に含まれる要素からなる配列 arr1 << obj # arr1 に要素 obj を追加した配列 arr1 == arr2 # arr1 と arr2 が等しければ true さもなくば false arr1 <=> arr2 # arr1 と arr2 が等しければ 0、大きければ 1、小さければ -1 arr1[n] # arr1 の n番目の要素 arr1[n..m] # arr1 の n~m番目の要素からなる配列 arr1[n, len] # arr1 の n番目から len個の要素からなる配列 arr1[n] = val # arr1 の n番目の要素を val で置換 arr1[n..m] = val # arr1 の n~m番目の要素を val で置換 arr1[n, len] = val # arr1 の n番目から len個の要素を val で置換
ハッシュ(Hash)に関しては、下記の演算子が定義されています。
hash1 == hash2 # hash1 と hash2 の要素がすべて等しければ true hash1 === hash2 # hash1 と hash2 の要素がすべて等しければ true hash1[key] # hash1 の中の keyに関連付けられた値 hash1[key] = val # hash1 の中の keyに関連付けられた値を valで置換
正規表現(Regexp)に関しては、下記の演算子が定義されています。
reg =~ str # 正規表現 reg に str がマッチすれば reg !~ str # 正規表現 reg に str がマッチしなければ
Object(==, ===, =~) Array(+, -, *, &, <<, <=>, ==, [], []=) Hash(==, ===, [], []=) String(%, *, +, <<, <=>, ==, =~, [], []=) Numeric(+, -, <=>) Float(+, -, *, /, %, **, ==, <, >, <=, >=, <=>) Integer(**, /) Bignum(+, -, *, /, %, **, ==, <=, >=, <=>, <<, >>, [], &, |, ^, ~) Fixnum(+, -, *, /, %, **, ==, <=, >=, <=>, <<, >>, [], &, |, ^, ~) Range(==, ===) Regexp(==, ===, =~)