演算子とは
演算子は、1つまたは複数のオペランドで実行される操作を表す記号です。
また演算子は、あらゆるプログラミング言語の基礎となるもので、演算子を使うと、オペランドに対してさまざまな種類の操作を行うことができます。
Rubyで使用される演算子には、次のような種類があります。
算術演算子
オペランドに対して算術/数学的な演算を行うために使用します。
- 足し算(+):ex) a+b
- 引き算(–):ex) a-b
- 掛け算(*):ex) a*b
- 割り算(/):ex) a/b
- 剰余(%):xをyで割った時の余りを返します。 ex) a%b
- 指数(**):xのy乗を返します。 ex) a**b
puts ("足し算:")
puts (10 + 20)
# 足し算:
# 30
puts ("引き算:")
puts (20 - 10)
# 引き算:
# 10
puts ("掛け算:")
puts (10 * 20)
# 掛け算:
# 200
puts ("割り算:")
puts (100 / 20)
# 割り算:
# 5
puts ("余り:")
puts (10 % 3)
# 余り:
# 1
puts ("指数:")
puts (2 ** 4)
# 指数:
# 16
比較演算子
比較演算子または関係演算子は、2つの値を比較するために使用されます。
- (==):与えられた2つの値が等しいかどうかをチェックします。等しい場合は、true を返します。そうでなければ、falseを返します。ex) 5==5 は true
- (!=): 与えられた2つの値が等しいかどうかを調べます。等しくない場合に、true を返します。そうでなければ、falseを返します。ex) 5!=5 は false
- (>):最初の値が 2 番目の値より大きいかどうかをチェックします。大きければtrue、そうでなければfalseを返します。ex) 6>5 は true
- (<):最初の値が 2 番目の値より小さいかどうかを調べます。小さければtrue、そうでなければfalseを返します。ex) 6<5 は false
- (>=):最初の値が 2 番目の値より大きい、または等しいかどうかを調べます。大きいまたは等しければtrue、そうでなければfalseを返します。ex) 5>=5 は true
- (<=):最初の値が 2 番目の値より小さい、または等しいかどうかを調べます。小さいまたは等しければtrue、そうでなければfalseを返します。ex) 5<=5 は true
- (<=>):最初の値と2番目の値が等しい場合は0を、最初の値が2番目の値より大きい場合は1を、最初の値が2番目の値より小さい場合は-1を返します。ex) 5<=>2 は 1
- (===) :case文で値が等しいかどうかを判定します。
- ‘.eql?’:この演算子は、受け手と引数がともに同じ型であり、かつ同じ値である場合にtrueを返します。
- ‘Equal?’:この演算子は、受け手と引数のオブジェクトIDが同じであればtrueを返します。
puts (10 == 20)
# false
puts (20 != 10)
# true
puts (100 > 50)
# true
puts (10 < 20)
# true
puts (2 <= 10)
# true
puts (2 >= 10)
# false
puts(20 <=> 20)
# 0
puts(10 <=> 20)
# -1
puts(20 <=> 10)
# 1
論理演算子
2つ以上の条件/制約を組み合わせるため、または元の条件の評価を補完するために使用される。
- AND(&&):条件の両方が満たされたときにtrueを返します。それ以外の場合はfalseを返します。また”and”は、&&演算子の代替となるものです。ex) a && b
- OR(||):条件のいずれか(または両方)が満たされたときにtrueを返します。それ以外の場合はfalseを返します。”or” は || 演算子の代替となります。ex) a || b
- NOT(!):条件が満たされない場合、trueを返します。そうでなければfalseを返します。”not”は、”!”演算子の代替となるものです。ex) !true は falseを返す
a = 10
b = 30
c = 50
if a == 10 && b == 30 && c == 50
puts result = a * b * c
end
if a == 10 || b == 30
puts result = a + b + c
end
puts !(true)
# 出力結果
# 15000
# 90
# false
代入演算子
代入演算子は、変数に値を代入するために使用されます。
代入演算子の左辺のオペランドは変数、右辺のオペランドは値です。右辺の値は左辺の変数と同じデータ型でなければならず、そうでない場合はコンパイラがエラーを発生させます。
- 単純代入 (a = b):aをbに代入します。
- 加算 and 代入 (a += b) :a = a + bと同じ。
- 減算 and 代入 (a -= b) :a = a – bと同じ。
- 乗算 and 代入 (a *= b) :a = a * bと同じ。
- 除算 and 代入 (a /= b) :a = a / bと同じ
- 剰余演算 and 代入 (a %= b) :a = a % bと同じ。
- 指数 and 代入 (a **= b) :a = a ** bと同じ。
puts a = 20
# a = 20
puts a += 10
# a = 30
puts a -= 5
# a = 25
puts a *= 10
# a = 250
puts a /= 4
# a = 62
puts a %= 3
# a = 2
puts a **= 3
# a = 8
ビット演算子
Rubyには、ビット単位で動作する6つのビット演算子があります。
- ビットAND(&):左辺と右辺の同じ位置にあるビットを比較して、両方のビットが1のときだけ1になります。
- ビットOR(|): 2つのビットのいずれかが1である場合に1となります。
- ビットXOR(^) :2つのビットが異なっていれば1になります。
- 左シフト(<<):左辺の数値を右辺の値だけ左にシフトします。左端からはみ出た数値は削除され、空いた右端には「0」が入ります。
- 右シフト(>>):左辺の数値を右辺の値だけ右にシフトします。右端からはみ出た数値は削除され、空いた右端には元々「0」であれば「0」、「1」であれば「1」が入ります。
- ビット反転(~):右辺の値の各ビットに対して「0」であれば「1」、「1」であれば「0」にします。
a = 10
b = 20
puts (a & b)
# 0
puts (a |b)
# 30
puts (a ^ b)
# 30
puts (a << 2)
# 40
puts (a >> 2)
# 2
puts (~a)
# -11
三項演算子
if-else文の省略形である条件演算子(?:;)です。
オペランドが3つあるため、三項演算子という名前がついています。trueまたはfalseを返します。
条件 ? 処理 : 当てはまらない場合の処理;
score = 100
result = score > 70 ? '合格' : '不合格'
puts result
# 出力結果
# 合格
範囲演算子
範囲演算子は、指定された要素の指定されたシーケンス範囲を作成するために使用されます。
- ダブルドット(..):開始要素と終了要素の両方を含む、指定されたシーケンス範囲を作成するために使用されます。ex) 7 … 10 は、7, 8, 9, 10
- トリプルドット(…):開始要素のみ含み、終了要素は含まない、指定されたシーケンス範囲を作成するために使用されます。ex) 7 … 10 は、7, 8, 9
range1 = (5 .. 8).to_a
puts "#{range1}"
# [5, 6, 7, 8]
range2 = (5 ... 8).to_a
puts "#{range2}"
# [5, 6, 7]
defined?演算子
defined?演算子は、渡された式が定義されているかどうかをチェックするための特殊な演算子です。
渡された引数が定義されていない場合はnilを返し、そうでない場合はその引数を定義した文字列を返します。
a = 10
b = 20
puts defined? a
puts defined? b
puts defined? c
puts defined? 30
# 出力結果
# local-variable
# local-variable
#
# expression
ドット(.)、ダブルコロン(:)演算子
- ドット(.)演算子:クラスのメソッドを呼び出すために使用します。
- ダブルコロン(::)演算子:クラスのメソッドだけでなく、定数の呼び出しにも使用されます。
NUMBER = 5
module A
NUMBER = 5
::NUMBER = 7
NUMBER = 10
end
puts NUMBER
puts A::NUMBER
class B
def a2
puts "ドット演算子"
end
end
puts B.new.a2
# 出力結果
# 7
# 10
# ドット演算子
# warning: already initialized constant NUMBER
# warning: previous definition of NUMBER was here
# warning: already initialized constant A::NUMBER
# warning: previous definition of NUMBER was here