【Ruby】各種演算子

2015年9月10日

代数演算子

下記の代数演算子が定義されています。

+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 がマッチしなければ

Ruby2入門

Posted by 管理人