Rubyに限らずプログラミングをする上で最も基本となるのが演算子です。
「演算子の種類が知りたい」
「演算子のそれぞれの使い方を知りたい」
そんな方に向けて、この記事ではRubyで使用するほとんどの演算子を網羅したので、これから学習する人や少し忘れてしまった人にはぴったりの内容になっています。
便利な演算子を使いこなせるようになれば、開発効率がアップすること間違いなしです。
なので、しっかりと各演算子の使い方を頭に叩き込んでおきましょう。
この記事では、rubyの演算子の使い方について以下の内容を解説していきます。
【基礎】代入演算子
【基礎】範囲演算子
【基礎】論理演算子
【基礎】比較演算子
【発展】配列演算子
【発展】ハッシュ演算子
【発展】文字列演算子
【発展】正規表現の演算子
【発展】三項演算子
Rubyの演算子について使い方を網羅しているのでぜひ参考にしてください!
演算子一覧
Rubyではここで紹介する演算子を使って、プログラミングしていきます。
それぞれの演算子は文脈によって異なる使い方をするものあるので、それぞれの演算子の違いをこれから確認していきましょう。
::
[]
+(単項) ! ~
**
-(単項)
* / %
+ –
<< >>
&
| ^
> >= < <=
<=> == === != =~ !~
&&
||
.. …
?:(条件演算子)
=(+=, -= … )
not
and or
代入演算子
代入
代入には「=(イコール)」を使います。
samurai = ruby samurai[0] = ruby samurai.ruby = rails
自己代入
samurai = 46 samurai += 2 #加算 p samurai samurai = 46 samurai -= 2 #減算 p samurai samurai = 46 samurai *= 2 #掛け算 p samurai samurai = 46 samurai /= 2 #割り算 p samurai samurai = 46 samurai %= 2 #2で割った余り p samurai samurai = 46 samurai **= 2 #2乗 p samurai
[実行結果]
48 44 92 23 0 2116
自己代入可能な演算子はこちらです。
+, -, *, /, %, **, &, |, ^, <<, >>, &&, ||
多重代入
samuria, ruby, rails = 1, 2, 3 samurai, ruby = [1, 2] # samurai = 1; ruby = 2 と同じ samurai, ruby = 1, 2 # samurai = 1; ruby = 2 と同じ samurai, ruby = 1 # samurai = 1; ruby = nil と同じ samurai, ruby, rails = 1, 2 # samurai = 1; ruby = 2; rails = nil と同じ samurai, ruby = 1, 2, 3 # samurai = 1; ruby = 2 と同じ samurai = 1, 2, 3 # samurai = [1, 2, 3] と同じ *samurai = 1, 2, 3 # samurai = [1, 2, 3] と同じ samurai, *ruby = 1, 2, 3 # samurai = 1; ruby = [2, 3] と同じ
範囲演算子
最大値を含むか含まないかによって..と…を使い分けることができます。
..(ドット2つ)
最大値を含む
1..10 # 1以上10未満 "a".."z" # aからyまでのアルファべット 1..10 # 1以上10未満 "a".."z" # aからyまでのアルファべット
a = 10 p (1..10) === a #=>true 10は含まれる
…(ドット3つ)
最大値を含まない
1...10 # 1以上10未満 "a"..."z" # aからyまでのアルファべット 1...10 # 1以上10未満 "a"..."z" # aからyまでのアルファべット
a = 10 p (1...10) === a #=>false 10は含まれない
論理演算子
&&、and
samurai && ruby samurai and ruby
string = "foo" string2 = "bar" if string == "foo" && string2 == "bar" p "合格" else p "不合格" end string = "foo" string2 = "hoge" if string == "foo" && string2 == "bar" p "合格" else p "不合格" end
[実行結果]
"合格" "不合格"
&&またはandでは、両方の条件を満たした場合にtrueと評価されます。
もちろん&&の部分をandに入れ替えてもOKです。
||、or
ruby || php ruby or php
string = "foo" string2 = "bar" if string == "foo" || string2 == "bar" p "合格" else p "不合格" end string = "poke" string2 = "hoge" if string == "foo" || string2 == "bar" p "合格" else p "不合格" end
[実行結果]
"合格" "不合格"
||またはorでは、どちらかががtrueであれば、全体としてtrueと評価されます。
(初めの式がtrueの場合、後の式は評価されません)
&&(and)と同様に、||をorに入れ替えても同じ挙動です。
!、not
!samurai not samurai ruby != samurai
string = "foo" if string != "foo" p "合格" else p "不合格" end if not string == "foo" p "合格" else p "不合格" end if !string == "foo" p "合格" else p "不合格" end
[実行結果]
"不合格" "不合格" "不合格"
どの条件式もstrong="foo"なので、一見trueと評価されそうですが、すべてfalseになります。
というのも先頭につける!、not、!=が否定の意味を持つからです。
if文での論理演算子の使い方はこちらで詳しく説明していますので、一読されることをおすすめします。
比較演算子
比較演算子は基本的には7個あります。
1.== #等しいかどうか
2.!= (等しくないかどうか)
3.> (左側が右側よる大きい)
4.>= (左側が右側以上)
5.< (右側が左側より大きい)
6.<= (右側が左側以上)
7.<=> (右側が左側より大きい時は-1、等しければ0、左側が右側よる大きい時は1)
上記の演算子を使って、1と999を比べてみましょう。
samurai = 1 samurai2 = 999 p samurai == samurai2 p samurai != samurai2 p samurai > samurai2 p samurai >= samurai2 p samurai < samurai2 p samurai <= samurai2 p samurai <=> samurai2
[実行結果]
false true false false true true -1
このように、<=>以外は真偽値で返されます。
繰り返しですが、<=>は左辺のほうが小さければ-1、大きければ1、等しいなら0、そして、比較できない場合はnilを返します。
今回は1の方が小さいので-1を返しました。
また、===は特殊で、比べるものによって判別の仕様が変わります。
if 77 === 77 puts "77は77と同じ数字である" end if (1..15) === 15 puts "1〜15の範囲に15は含まれる" end if /[0-9]/ === "3" puts "3は左辺のバターンにマッチする" end if String === "z" puts "zはStringクラスに含まれている" end
[実行結果]
77は77と同じ数字である 1〜15の範囲に15は含まれる 3は左辺のバターンにマッチする zはStringクラスに含まれている
このように、数、範囲、正規表現、文字列と非常に広い範囲に渡って使用することができます。
if文の条件として使用するにはとても便利ですね。
配列演算子
配列の演算子には、実用的なものがたくさんあるので、しっかりと覚えておきましょう。
array1 = [1,2,3] array2 = [4,5,6] p array1 p array2 p array1 + array2 #array1とarray2を連結した配列 p array1 - array2 #array1からarray2の要素を取り除いた配列 p array1 * 3 #array1の各要素を3回繰り返した配列 p array1 * "-" #array1の各要素を"-"で連結した文字列 p array1 & array2 #array1とarray2双方に含まれる要素からなる配列 p array1 << 7 #array1に要素7を追加した配列 p array1 == array2 #array1とarray2が等しければtrueさもなくば false p array1 <=> array2 #array1とarray2が等しければ 0、大きければ 1、小さければ -1 p array1[3] #array1の3番目の要素 p array1[2..3] #array1の 2~3番目の要素からなる配列 p array1[1, 2] #array1の1番目から2個の要素からなる配列 p array1[3] = 4 #array1の3番目の要素を4で置換 p array1[1..3] = 0 #array1の1~3番目の要素を0で置換 p array1[1, 2] = 3 #array1の1番目から2個の要素を3で置換
[実行結果]
[1, 2, 3] [4, 5, 6] [1, 2, 3, 4, 5, 6] [1, 2, 3] [1, 2, 3, 1, 2, 3, 1, 2, 3] "1-2-3" [] [1, 2, 3, 7] false -1 7 [3, 7] [2, 3] 4 0 3
使いか方を覚えていないものは、必ず自分で条件を変えて実行してみてくださいね。
また、配列の基本的な使い方はこちらで解説してありますので、一読することをおすすめします。
ハッシュ演算子
ハッシュの演算子の使い方の例です。
==演算子を使って、二つのハッシュのkeyとvalueが等しいのか比べてみましょう。
hash1 = {"Ruby":1,"Rails":2,"PHP":3,"Java":4} hash2= {"Ruby":1,"Rails":2,"PHP":3,"Java":4} p hash1 p hash2 p hash1 == hash2#hash1とhash2が等しいかどうか hash1[:Java] = 5 #"Java"の値を5に変更する p hash1 p hash2 p hash1 == hash2#hash1とhash2が等しいかどうか
[実行結果]
{:Ruby=>1, :Rails=>2, :PHP=>3, :Java=>4} {:Ruby=>1, :Rails=>2, :PHP=>3, :Java=>4} true {:Ruby=>1, :Rails=>2, :PHP=>3, :Java=>5} {:Ruby=>1, :Rails=>2, :PHP=>3, :Java=>4} false
このようにhash1の一つの要素を変更したので、hash1==hash2がfalseに変わるのを確認できます。
ハッシュの基本的な使い方はこちらで解説してますので、一読することをおすすめします。
文字列演算子
string1 = "abc" string2 = "def" p string1 + string2 string1 << string2 p string1 p string1 * 3 [実行結果]"abcdef" "abcdef" "abcdefabcdefabcdef"それぞれの演算子の文字列においての意味は
+はstring1とstring2の連結
<<はstring1の内容にstring2を加えて、string1を変更
*はstring1を指定した数字文だけ繰り返す
です
文字列についてはこちらに勉強しやすいようにまとめリンクが用意されていますので、一読することをおすすめします。
3ステップで簡単! Rubyの文字列を 完全理解更新日:2022年10月3日正規表現の演算子
p /[0-9]{4}/ =~ "jfjsal;7777" #数字が4つ以上連続する位置はどこか => 7 p /[0-9]{4}/ =~ "777" #数字が4つ以上連続する位置はどこか => nil p /[0-9]{4}/ !~ "7777" #数字が4つ以上連続しないか =>false p /[0-9]{4}/ !~ "777" #数字が4つ以上連続しないか =>true[実行結果]
7 nil false true・=~は文字列に対してのパターンマッチを行い、マッチしたらマッチした部分の配列の位置を整数値で返し、マッチしなかったらnilを返します。
・!~はマッチしなかったときにtrue、マッチした時にfalseを返します。
正規表現については理解が曖昧なかたは、こちらの記事を一読することをおすすめします。
【Rubyの正規表現!】基礎の基礎から応用まで徹底解説!更新日:2024年5月6日三項演算子
三項演算子を使えば、if else endを一行に納めることができます。
よく使うテクニックでのでここでしっかりマスターしておきましょう。
[基本形]
条件 ? 条件がtrue : 条件がfalse[サンプルコード]
samurai = 88 p samurai < 100 ? "ruby" : "rails" samurai = 101 p samurai < 100 ? "ruby" : "rails"[実行結果]
"ruby" "rails"このように、samuraiが100よりも小さい場合には"ruby"を返して、100よりも大きい場合には"rails"を返しています。
if else endを使った場合と比べてとてもスッキリと書けます。
まとめ
いかがでしたでしょうか?
この記事では、rubyの演算子の使い方についてを解説しました。
rubyには便利な演算子がたくさん用意されていることを確認いただけたかと思います。
ドットの数の違いで最大値を含める、含めないかが指定できるなどぱっと見は違いがわからないものもあるので、この記事でしっかりと使い方を定着させておきましょう。
また、一つ一つ自分で数値を変えて実行してみると理解が深まるので、ぜひ自分で一度やってみてください。
もしrubyの演算子の使い方について忘れてしまったらこの記事を確認してくださいね!