- 更新日: 2017年09月14日
- 公開日: 2017年08月14日
Rubyの演算子まとめ!Rubyの演算子をマスターしよう!

プログラミング言語には 演算子 というコンピュータに対して演算を行わせる記号が用意されていますが、人気上昇中のプログラミング言語Rubyにも同様に、様々な演算子が用意されています。 そこで、今日はRubyの代表的な演算子について、下記のように演算子一覧を用いてわかりやすく解説していきます。
Rubyの演算子一覧
| 演算子 | 種別 | 例文 | 意味 | 
|---|---|---|---|
| + | 代数演算子(四則演算) | a + b | aにbを足す (足し算) | 
| - | 代数演算子(四則演算) | a - b | aからb引く (引き算) | 
| * | 代数演算子(四則演算) | a * b | aにbをかける (かけ算) | 
| / | 代数演算子(四則演算) | a / b | aをbでを割る (割り算) | 
| % | 代数演算子 | a % b | aをbで割った余り | 
| ** | 代数演算子 | a ** b | aのb乗 | 
| + | 文字列演算子 | str1 + str2 | str1とstr2を文字列連結する(非破壊的) | 
| << | 文字列演算子 | str1 << str2 | str1に対してstr2を文字列連結する(破壊的) | 
| * | 文字列演算子 | str1 * n | str1をn回繰り返す | 
| == | 比較演算子 | 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 | 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 << n | aをnビット左シフト | 
| >> | ビット演算子 | a >> n | aをnビット右シフト | 
| [] | ビット演算子 | a[n] | aのnビット目が立っていれば1それ以外は0 | 
| =~ | 正規表現演算子 | a =~ /regex/ | aが正規表現regexとマッチする | 
| !~ | 正規表現演算子 | a !~ /regex/ | aが正規表現regexとマッチしない | 
| ! | 論理演算子 | !a | aがfalseの場合true | 
| && | 論理演算子 | a && b | aかつbがtrueの場合trueそれ以外はfalse | 
| || | 論理演算子 | a || b | aもしくはbのどちらかがtrueであればtrueそれ以外はfalse | 
| not | 論理演算子 | a not b | !aと同等 | 
| and | 論理演算子 | a and b | a && b と同等 | 
| or | 論理演算子 | a or b | a || b と同等 | 
| = | 代入演算子 | 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 && (a = b) と同等 | 
| ||= | 代入演算子 | a = b | a = a || (a = b) と同等 | 
| + | 配列演算子 | array1 + array2 | array1とarray2を連結(非破壊的) | 
| - | 配列演算子 | array1 - array2 | array1とarray2の差集合 | 
| | | 配列演算子 | array1 | array2 | array1とarray2の和集合 | 
| & | 配列演算子 | array1 & array2 | array1とarray2の積集合 | 
| * | 配列演算子 | array1 + n | array1の各要素をn回繰り返す | 
| << | 配列演算子 | array1 << array2 | array1に対してarray2を連結する(破壊的) | 
| == | 配列演算子 | array1 == array2 | array1の各要素とarray2の各要素が全て同一であればtrue | 
| <=> | 配列演算子 | array1 <=> array2 | ※別途解説 | 
| [] | 配列演算子 | array1[n] | array1のn番目の要素 | 
| [..] | 配列演算子 | array1[n..m] | array1のn~m番目の要素 | 
| [,] | 配列演算子 | array1[n, length] | array1のn番目からlength個の要素 | 
| []= | 配列演算子 | array1[n] = a | array1のn番目の要素にaを代入する | 
| [..]= | 配列演算子 | array1[n..m] = a | array1のn〜m番目の要素にaを代入する | 
| [,]= | 配列演算子 | array1[n, length] | array1のn番目からlength個の要素にaを代入する | 
| == | ハッシュ演算子 | hash1 == hash2 | hash1とhash2の内容が全て等しい | 
| [] | ハッシュ演算子 | hash1[key] | hash1の中のkeyに紐づく値 | 
| []= | ハッシュ演算子 | hash1[key] = a | hash1の中のkeyに紐づく値にaを代入する | 
| ? | 3項演算子 | a ? b : c | aがtrueであればbそれ以外はc | 
代数演算子
代数演算子は主に四則演算を行う際の演算子です。最も基本的な演算子ですね。
| 演算子 | 例文 | 意味 | 
|---|---|---|
| + | a + b | aにbを足す (足し算) | 
| - | a - b | aからb引く (引き算) | 
| * | a * b | aにbをかける (かけ算) | 
| / | a / b | aをbでを割る (割り算) | 
| % | a % b | aをbで割った余り | 
| ** | a ** b | aのb乗 | 
この中では、剰余の計算(%)が慣れない記号の割によく使われる演算子です。 例えば、3の倍数のときだけ何か処理を行うと行った場合、割った余りを求めることで下記のように処理を行うことが可能です。 (==という記号は、後述する論理演算子です)
if a % 3 == 0
  p '3の倍数です'
end
文字列演算子
文字列に対して演算を行う際の演算子です。
| 演算子 | 例文 | 意味 | 
|---|---|---|
| + | str1 + str2 | str1とstr2を文字列連結する(非破壊的) | 
| << | str1 << str2 | str1に対してstr2を文字列連結する(破壊的) | 
| * | str1 * n | str1をn回繰り返す | 
文字列連結する際には + や << の演算子を利用します。この際に、注意が必要なのはその演算子が破壊的なのか非破壊的なのかという点です。
非破壊的・破壊的とは
- 非破壊的…新しいオブジェクトを作って返す
- 破壊的…もとのオブジェクトを直接書き換える
上記のようにもともと定義されている変数を上書きするか否かが利用時に考慮するべき点です。もし、演算を行う前の値を利用しなければならない場合に、破壊的な演算を行ってしまうと不具合の原因となります。
比較演算子
if文等で真偽値(true / false)を求める際によく利用します
| 演算子 | 例文 | 意味 | 
|---|---|---|
| == | 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 | ※別途解説 | 
比較演算子には不等号が多く用いられており、不等号を逆に指定してしますと真逆の処理結果になってしまうので、左右のどちらをベースにするかを考え、正しく不等号を用いましょう。
宇宙船演算子
<=> は宇宙船演算子と呼ばれ(その形から)ており、不等号を用いており、左辺と右辺を比較するのは他の比較演算子と同様ですが、使い方が少し複雑です。 ただし、他の演算子はtrueもしくはfalseを求める際に利用するのですが、宇宙船演算子に関しては、比較結果を数値で表します。
具体的には下記のようになります。
100 <=> 200   ... -1
200 <=> 100   ... 1
200 <=> 200   ... 0
100 <=> '100'  ... nil
このように左辺が右辺より小さければ負の数(-1) 大きければ正数(1)を、同じであれば0を表します。 左辺に対して右辺の型が異なる場合など、比較が不可能な場合にはnilになります。
上記の演算結果から、宇宙船演算子は下記のように配列の中の値の順番をソートする際によく利用されます。
users.sort{ |a, b| a.age <=> b.age }
ビット演算子
他の演算子に比べると利用する頻度は高くはありませんが、Rubyでもビットに対する演算を行うことができます。
| 演算子 | 例文 | 意味 | 
|---|---|---|
| ~ | ~a | 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 << n | aをnビット左シフト | 
| >> | a >> n | aをnビット右シフト | 
| [] | a[n] | aのnビット目が立っていれば1それ以外は0 | 
正規表現演算子」
メールアドレスのフォーマットチェックなど、フォーマットがある程度決まっている場合に利用することができます。
| 演算子 | 例文 | 意味 | 
|---|---|---|
| =~ | a =~ /regex/ | aが正規表現regexとマッチする | 
| !~ | a !~ /regex/ | aが正規表現regexとマッチしない | 
この演算子に関しては、正規表現についての理解をする必要があります。
論理演算子
論理演算子も、比較演算子同様、左辺と右辺を比較し、true/false を表すことができます。
| 演算子 | 例文 | 意味 | 
|---|---|---|
| ! | !a | aがfalseの場合true | 
| && | a && b | aかつbがtrueの場合trueそれ以外はfalse | 
| || | a || b | aもしくはbのどちらかがtrueであればtrueそれ以外はfalse | 
| not | a not b | !aと同等 | 
| and | a and b | a && b と同等 | 
| or | a or b | a || b と同等 | 
!とnot、&&とand、||とorに関しては、同等の意味を成すため、同様の感覚で扱うことができます。
代入演算子
変数に対して、値を更新する際に代入演算子は利用されます。
| 演算子 | 例文 | 意味 | 
|---|---|---|
| = | 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 && (a = b) と同等 | 
| ||= | a = b | a = a || (a = b) と同等 | 
Rubyにはインクリメント(++)が用意されていない
他の言語ではよく、インクリメント(++)やデクリメント(--)が使われますが、Rubyにおいてはこれらの演算子が用意されていません。その為、下記のように代入演算子を用いて同様の演算を行うことができます。
PHPの場合
$i++;
$i--;
Rubyの場合
i += 1
i -= 1
上記のように記述することでインクリメント(++)やデクリメント(--)と同様の演算結果となります。
配列演算子
Rubyでは配列は演算子を使って様々な操作を行うことが可能です。
| 演算子 | 例文 | 意味 | 
|---|---|---|
| + | array1 + array2 | array1とarray2を連結(非破壊的) | 
| - | array1 - array2 | array1とarray2の差集合 | 
| | | array1 | array2 | array1とarray2の和集合 | 
| & | array1 & array2 | array1とarray2の積集合 | 
| * | array1 + n | array1の各要素をn回繰り返す | 
| << | array1 << array2 | array1に対してarray2を連結する(破壊的) | 
| == | array1 == array2 | array1の各要素とarray2の各要素が全て同一であればtrue | 
| <=> | array1 <=> array2 | ※別途解説 | 
| [] | array1[n] | array1のn番目の要素 | 
| [..] | array1[n..m] | array1のn~m番目の要素 | 
| [,] | array1[n, length] | array1のn番目からlength個の要素 | 
| []= | array1[n] = a | array1のn番目の要素にaを代入する | 
| [..]= | array1[n..m] = a | array1のn〜m番目の要素にaを代入する | 
| [,]= | array1[n, length] | array1のn番目からlength個の要素にaを代入する | 
特に、配列同士の連結や比較はよく利用しますので覚えておきましょう。 また、[..]は範囲演算子と呼ばれ、配列の範囲を指定することができます。範囲演算子は下記のように応用し、配列の最後の値を簡単に指定することができます。
array[0..-1]   → 配列の全ての要素を指定
array[1..-1]    → 配列の2番めの値から最後までの要素を指定
array[-1]        → 配列の最後の値
ハッシュ演算子
配列に対する演算同様、ハッシュに対してもいくつか演算子が用意されています。
| 演算子 | 例文 | 意味 | 
|---|---|---|
| == | hash1 == hash2 | hash1とhash2の内容が全て等しい | 
| [] | hash1[key] | hash1の中のkeyに紐づく値 | 
| []= | hash1[key] = a | hash1の中のkeyに紐づく値にaを代入する | 
3項演算子
ここまでの演算子は大抵が、aとbといった2項にたいする演算でしたが、?を用いることで、3項に対して演算を行うことができます。
| 演算子 | 例文 | 意味 | 
|---|---|---|
| ? | a ? b : c | aがtrueであればbそれ以外はc | 
result = flag ? 'フラグON' : 'フラグOFF'
また、上記の処理は下記のようにif文でも全く同様の処理を行うことが可能です。
if flag
  result = 'フラグON'
else
  result = 'フラグOFF'
end
場合によっては、if文を用いるよりも簡潔に処理を記述できるので、3項演算子はぜひ使いこなせるようになりましょう。
\Rubyでのサービス開発スキルが身に付く/
まとめ
いかがだったでしょうか。Rubyには演算子一覧にあるように様々な演算子が用意されており、時と場合により使い分ける必要があります。 ただし、中にはめったに使わないものもありますので、今回は「こういう演算子が存在するんだな」程度で大丈夫です。 演算子一覧にあるものは、これからどんどん使っていって慣れていきましょう。

- この記事を書いた人
- ベンジャミン吉澤

![[初心者〜上級者まで]Ruby学習におすすめの本・レベル別3選](https://mash-jp.cdn.codecamp.jp/production/posts/34801/7b50ef64055c6853e9b472ac2d5d6a318a0957f3.34862.phone.jpg?1579587874)













