2022/02/19(土) ゼロからわかるRuby超入門Chapter3

比較メソッド(<>または、<=>=)

比較メソッドは、<>または、<=>=のことです。 具体的に言うと、左右の数値や文字列の大小を比較して、条件を満たす場合にtrueを、満たさない場合にfalseを戻り値として返すメソッドです。下記の例からも分かるように大小を比較するメソッドですが、比較結果は数値ではなく、trueとfalseでのみ出力される部分に注意が必要です。👈🏻

irb(main):002:0> 1 < 2
=> true #=> 実行結果としてtrueオブジェクトで置き換えられる
irb(main):003:0> 1 > 2
=> false

また、変数に入った数値を比較することも出来ます。この比較メソッドは、if文の条件式などで使われます。

irb(main):004:0> wallet = 500
=> 500
irb(main):005:0> wallet >= 500
=> true
irb(main):006:0> wallet = 300
=> 300
irb(main):007:0> wallet >= 500
=> false

文字列の文字数を比較することも出来ます。

irb(main):008:0> 'ruby' >= 'put'
=> true
irb(main):009:0> 'ruby'.length >= 'put'.length
=> true
irb(main):010:0> 'ruby' < 'put'
=> false

等しい、等しくないを判断できる比較メソッド(==!=)

比較メソッドには、<>または、<=>=の他にも==!=があります。==は、等しいかどうかを判断して等しい時にtrueを返す比較メソッドです。対して、!=は、等しくない時にtrueを返す比較メソッドです。つまり、==を使った時にfalseになる条件の時!=を代わりに使用するとtrueが返るということです。使いたい条件によって、使い分けましょう。

== !=
等しい時 true false
等しくない時 false true

📌 <>または、<=>=の比較メソッドは、特に大小を比較します。そのため、文字列の文字数の大小を比較できます。 ==!=の比較メソッドは、数値オブジェクトだけでなく文字列オブジェクトの等しい、等しくないを比較できます。つまり、文字列そのものが等しいかを比較できるのです。

# 文字列同士が等しいのかを調べることも可能。
irb(main):011:0> 'ruby' == 'ruby'
=> true
irb(main):012:0> 'ruby' != 'ruby'
=> false
irb(main):013:0> 'ruby' != 'ruby  '
=> true
# 空白を入れると同じ文字列として見なされない。
irb(main):014:0> 'ruby' == 'ruby   '
=> false
# 空白を入れると同じ文字数の文字列として見なされない。
irb(main):016:0> 'ruby'.length == 'ruby   '.length
=> false
# 文字数は同じでも異なる文字列は、falseと判断できる
irb(main):017:0> 'ruby' == 'konn'
=> false

末尾に?が付くメソッド

末尾にが付くメソッドは、trueかfalseの真偽値を返します。 ?を含めてのメソッド名なので、?を省略すると、エラーとなってしまいます。

Rubyで使われる記号の意味(正規表現の複雑な記号は除く)

メソッド 意味
include? 含むかどうか(部分一致)。配列であれば、等しい要素を持つ時に、文字列であれば、文字列中に部分文字列が含まれていればtrueを返す。
empty? 入れ物が空かどうか(String, Array, Hash, Set)。文字列が空 (つまり長さ 0) の時、配列であれば、自身の要素の数が 0 の時にtrueを返す。
nil? nilかどうか
  • nil = 「何も存在しない」という意味。ここで間違えやすいのは、Rubyでは、「数字の0」や「空集合」や「false」などをnilとして扱っていないことです。

if文を使った条件式

  • if文は条件を満たした(true)時に処理を実行し、条件を満たさない(falseとnil)時は処理を実行しません 【Ruby】 論理演算子(!, &&, ||, not, and, or)をまるごと学ぼう!
  • インデント(スペース2つ分)を用いるとプログラムを読みやすく、見やすく書くことができます
  • unlessifと反対の動きをします。条件が満たされない(false)の時に処理し、条件を満たす(true)の時は処理を実行しません。
  • if文の条件式に数値オブジェクト文字列オブジェクトを指定した場合は、条件式が常にtrueの状態になります。

後置if(if修飾子)

  • ifを使って、複数行で書いたプログラムを1行で簡潔に書くことができるものです。
  • 条件を満たした時の処理が1行で収まるときに使います。他にも、以下のような時に使います。
# 後置ifの使い方
条件式がtrueの場合に実行したい処理 if 条件式

# 後置unlessの使い方
条件式がfalseの場合に実行したい処理 unless 条件式

条件式で条件を満たさない時にも処理を実行する(処理を分岐)

  • 条件を満たさない時の処理を記述するのにelse節を使う
if 条件
    # 条件を満たした時の処理
else
    # 条件を満たさない時の処理
end
  • ifで分岐する処理を3つ以上にする場合、elsifとelseの両方を用います。
  • elsifはif以外の別の条件を書くことができます。
if 条件①
    # 条件①を満たした時の処理
elsif 条件②
    # 条件①を満たさないけれど、条件②を満たした時の処理
else
    # 条件①②の両方とも満たさない時の処理
end

論理演算子を用いて複数の条件を実現する

論理演算子とは?

論理演算子とは、「真」と「偽」の2つの値だけで行う計算(論理演算)を表す記号のことです。Rubyの論理演算子には、「!, &&, ||, not, and, or」が用意されています。 論理演算子を使用すると、複数の条件式を組み合わせて判定することができます。

  • A || Bは、左辺(A)を評価して真ならその値を返し、偽なら右辺(B)の値を返す

  • A && Bは、左辺(A)を評価して偽ならその値を返し、真なら右辺(B)の値を返す

【Ruby】 論理演算子(!, &&, ||, not, and, or)をまるごと学ぼう!

条件によって、複数の選択肢から1つを選んで分岐する方法(case)

order = 'パフェ'
# 条件の候補に合致する処理を実行させる(case)
case order
when 'カフェラテ' # 変数orderの値がカフェラテの時(候補①)
    puts 'カフェラテ'
when 'モカ' # 変数orderの値がモカの時(候補②)
    puts 'モカ'
else # どの選択肢(カフェラテでもモカ)でもない時(候補①②以外)
    puts '取り扱っていません'
end
    

決まった回数だけ繰り返す(timesメソッド)

# 3回繰り返す処理(繰り返す処理が複数行ある時)
3.times do
    puts 'モカ'
    puts 'ください'
end
    
# 3回繰り返す処理(繰り返す処理が1行のみの時)
# ブロックをdo ~ endではなく、{}で記述できます
3.times { puts 'カフェラテください'}

条件を満たしている間ずっと繰り返す(whileメソッド)

biscuit = 0
# ビスケットが5つになるまでずっと繰り返す(繰り返しの条件)
while biscuit < 5
    biscuit += 1 # 変数biscuitの値に1を加えて再度代入する
    puts  "ポケット叩くとビスケットが#{biscuit}" # 式展開を使っているので、""を使う
end

#=>ポケット叩くとビスケットが1つ
#=>ポケット叩くとビスケットが2つ
#=>ポケット叩くとビスケットが3つ
#=>ポケット叩くとビスケットが4つ
#=>ポケット叩くとビスケットが5つ

paiza.io

参考

ゼロからわかるRuby超入門 chapter3