【5日目:とうとうきた条件分岐】改訂3版基礎Ruby on Railsをまた進めたんやで。

シェアする

  • このエントリーをはてなブックマークに追加
41AkxXsz+5L._SX258_BO1,204,203,200_

条件分岐、メソッド、ブロック

条件式

条件式とはある条件が成立しているかどうかを調べる式のこと。

「a == b」(aとbが等しいかどうか)とか。

if式、unless式を条件分岐を行うときに使う。

比較演算子や論理演算子大事やで。論理式は算数苦手な人、ガンバッテや。

Rubyの比較演算子

演算子 意味
== 等しい a == b
=== 等しい(case式で内部的に使われる) a === b
!= 等しくない a != b
> より大きい a > b
>= 等しいかより大きい(以上) a >= b
< より小さい a < b
<= 等しいかより小さい a <= b
<=> 右辺が左辺より小さいとき-1、等しい時0、大きい時1を返す(Arrayオブジェクトのsortメソッドなどで使われる) a <=> b
=~ 正規表現のパターンマッチ(一致する) a =~ /abc/
!~ 正規表現のパターンマッチ(一致しない) a !~ /abc/

Rubyの論理演算子

演算子 意味
&& かつ a > 1 && b > 2
and かつ a > 1 and b > 2
|| または a > 1
or または a > 1 or b >2
! ではない !(a == b)
not ではない not a == b

例:サンプルコード
入力された数字が0以上100未満ならtrue、そうでなければfalseの条件式をしようした場合。

print "数字を入力してください:"
num = gets.to_i
b = (0 <= num && num < 100) 
puts b
数字を入力してください:77
true

Rubyではnumが0の時や空文字のときでも「真」になる。
Rubyで偽になるのは、falseかnilの場合だけ。

記号と文字で優先順位が違うんやで

&&と||では&&の方が優先順位が高いが、

andとorだと優先順位が同じになる。

a = true; b = true; c = false
a || b && c   # trueになる
a or b and c # falseになる

基本的にif文は中の条件をtrueかfalseに置き換えている。

irbで検証したら良いけど。
例えば1==1はtrueが返る
1==2はfalseになる。

参考リンクやで

http://www.eonet.ne.jp/~imagawa/denki_kiso/ronrikairo.html

if式やで

もし◯◯ならば■■をする。という条件分岐を創るものをif式といふ。

if式は「if条件式」と「end」で囲む。

if式以外にも、case式、メソッド定義、クラス定義、ブロックなど
Rubyの制御構造は全てendで終わる。

if式

if 条件式
    条件が正しい場合に実行するプログラム
end

入力された整数が偶数の場合「偶数っす」と表示するif式

print "整数を入力してください:"
num = gets.to_i
if num % 2 == 0
  puts "偶数っす"
end

if式は一行でもかけるよ。後ろにthenがいるよ。

if num % 2 == 0 then puts "偶数っす" end

これも同じ意味だよ。

次の、このifを後ろにつける形はRubyプログラマが多用するよ。
※めっちゃ省略できるやんけ。

puts "偶数っす" if num % 2 == 0

次はもっと複雑なものを書くとき。

「もし◯なら■を、◎なら△を、そうでなければ◆する」というやつ

if 条件式1
  条件式1が正しい場合に実行するプログラム
elsif 条件式2
  条件式2が正しい場合に実行するプログラム
else
  条件式1にも2にも正しくない時に実行するプログラム
end

上記のように条件を組み合わせるときは「elsif」や「else」を使用する。

例:1500以上なら送料無料、0円以上で1500未満なら送料300円、それいがいなら入力が間違ってますを表示。

print "価格を入力して下さい"
num = gets.to_i
if num >= 1500
  puts "送料無料です。"
elsif 0 < num && num < 1500
  puts "送料300円です"
else
  puts "入力が間違っています"
end  

ちなみに、if式のほかに、条件式が正しくないときにプログラムを実行するunless式もある。※unless式もelseやelsifを表示できる。

unless num % 2 == 0
  puts "偶数ではありません"
end

puts "偶数ではありません" unless num % 2 == 0  # 一行にしたバージョン

ifの中のローカル変数について。

Rubyでは、if式やunlessの式のコードを読み込むときにその中に変数があれば、
ローカル変数を作成する。
※ローカル変数はブロックの中で定義された変数のこと。使い捨てのイメージ。

変数の値はnilになるそうです。

if num < 4
    message = "OK"
end
puts message # 出力結果はnil

三項演算子「?:」

三項演算子「?:」は「もし◯なら、□、違うなら△」を一行で表せるもの。

「◯ ? □ : △」の形を取る。

example = (num % 2 == 0 ? "偶数です。" : "奇数です。")

case式

「もし〜なら、もし〜なら、・・・」が長くなった時にすっきりと表現できる式。

書き方は二通りある。

タイプ1

if式を置き換えたようなもの。

case
when 条件式1
  条件式1が正しい時に実行するプログラム
when 条件式2
  条件式2が正しい時に実行するプログラム
else
  条件式1も2も正しくない時に実行するプログラム
end

タイプ2

caseの後ろに置いた変数を順にwhenの式と比べ、正しい場合にwhenの次のプログラムを実行する。

こっちのタイプの方がcase式で利用される。

case 変数
  when 式1
    「式1 == 変数」の場合実行するプログラム
  when 式2
    「式2 == 変数」の場合実行するプログラム
  else
    変数がどれにも当てはまらないときに実行するプログラム
end

タイプ2を使ったおみくじの仕組み

num = rand 10
case num
  when 0
    puts "大吉"
  when 1, 2, 3, 6
    puts "中吉"
  when 7, 5
    puts "吉"
  when 9
    puts "凶"
  else
    puts "大凶"
end

また一行でもかける。

when 1,2,3 then puts "中吉です"

thenが必要になる。

caseの比較

case式では、==ではなく===で比較が行われる。

多くのオブジェクとでは==と===は同じだが別機能になっているオブジェクトもある。

「正規表現 === 変数」は正規表現のマッチを試す。

「クラス === 変数」は、変数がそのクラスのオブジェクトかどうかを調べる。

case str
when /abc/ then puts "abcとマッチしました"
when String then puts "Stringオブジェクト"
end

↑case式の短縮の書き方でかいてるんやでー

if式やcase式は値を返す。

if式もcase式も値を返す。

result = if num % 2 == 0
  "偶数"
else
  "奇数"
end

result = case num
when 0
  "OK"
when 1
  "NG"
else
  "Bad"
end

変数resultには結果(値)がはいる。

ふう、今日はここまでにしとくか。

本記事は下記本の勉強記事です。初学者にとても良い本です。

スポンサーリンク
Sponsored Link
Sponsored Link

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
Sponsored Link