【Ruby】各種演算子
代数演算子
下記の代数演算子が定義されています。
+a # 正数
-a # 負数
a + b # 加算
a - b # 減算
a * b # 乗算
a / b # 除算
a % b # a を b で割った余り
a ** b # a の b 乗
a += 1 # a の値をひとつ加算する
a -= 1 # a の値をひとつ減算する
Ruby には、C 言語や Java 言語のような
a++ や ++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
<=> 演算子は、a < b であれば -1、a == b であれば 0、a > b であれば 1、
比較できない時は nil を返します。
=== 演算子は、case 文のマッチングで用いられる比較を行います。
if 5 === 5 then # Numeric
end
if (1..10) === 5 then # Range
end
if /[a-z]/ === "a" then # Regexp
end
if String === "a" then # Module
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
if 文で表現すると下記のようになります。
if a then
puts "b"
else
puts "c"
end
配列演算子
配列(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 がマッチしなければ