条件分岐、メソッド、ブロック
条件式
条件式とはある条件が成立しているかどうかを調べる式のこと。
「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には結果(値)がはいる。
ふう、今日はここまでにしとくか。
本記事は下記本の勉強記事です。初学者にとても良い本です。