Cherry本勉強中 8月31日
真偽値と条件分岐
&& ||
-Rubyは左から順に式を評価する
左から評価していって、式全体が真か偽かを判断する(判断できたところでストップ)
puts "①" puts 4 && 5 && 6 puts "②" puts 4 && nil && 6 puts "③" puts 4 && false && 6 puts "④" puts nil && 5 && 6 puts "⑤" puts nil || false puts "⑥" puts false || nil puts "⑦" puts nil || false || 4 || 5
① 6 ② ③ false ④ ⑤ false ⑥ ⑦ 4
わかったこと
&&は偽が出るまで式を評価し続け、||は真が出るまで式を評価し続ける
出ない場合は、最後に評価したものを表示する
コンソールには、falseは表示されるが、nilの場合は「nil」と表示されず、空白で表示される
&&と||の使い方
上でのことを利用した活用方法
# A、B、C の順に検索し、最初に見つかったグループ(nil又はfalse以外の値)を変数に格納する group =find_group("A") || find_group("B") || find_group("C") # 正常なユーザーであれば、メールを送信する user.valid? && send_email_to(user)
if文以外でも使用できることを改めて知りました。
優先順位が低いand/or/not
- 似たような働き
and => &&
or => ||
not => !
注意点
似たような働きをするが、and/or/notは&&/||/!よりも優先順位が低い
優先順位 高い ! && || not and or 優先順位 低い
注意点
rbファイルで確かめた結果、andもorも聞かない、cherry本に書いているように表示されませんね
t1 = true t2 = true f1 = false puts t1 || t2 && f1 # t1 || (t2 && f1) puts t1 or t2 and f1 # (t1 or t2) and f1 puts t1 || (t2 && f1) puts (t1 or t2) and f1 puts true and false puts true && false
true true true true true false
cherry本を見ると、&&だけだと優先順位の兼ね合いで括る場所が異なるため、andを使用することがあると書いてありますが、同様に&&と()を使用すれば同じ処理ができるということだったので、私はそっちでやっていこうと思います。
基本、and/or/notは制御フローで使用するとのことです。
unless文
if文の否定版「〜ではないなら」=>falseであれば表示する
elseにはtrueだった場合を記述する
elsifはunless文にはない
case文
case文は「case when else」を使用する
country = "italy" # if文 greeting = if country == "japan" "こんにちは" elsif country == "us" "Hello" elsif country == "italy" "ciao" end puts greeting # case文 greeting = case country #case 対象のオブジェクトや式 when "japan" #when 値1 "こんにちは" # 値1だった場合の処理 when "us" #when 値2 "Hello" # 値2だった場合の処理 when "italy" #when 値3 "ciao" # 値3だった場合の処理 else "???" end puts greeting
case文は条件(when)のところに複数条件をつけることが可能
country = "日本" greeting = case country when "japan" ,"日本" #when 値1-1,値1-2 "こんにちは" # 値1-1又は値1-2だった場合の処理 when "us" ,"アメリカ" "Hello" when "italy" ,"イタリア" "ciao" # 値3だった場合の処理 else "???" end puts greeting # 日本と表示される
?を使った条件分岐
式? trueの処理 : falseの処理
if文と比べると
#if文 n = 11 if n>10 puts "10より上" else puts "10より下" end # ?を使った条件分岐 puts n > 10 ? "10より上": "10より下"
参考 「プロを目指す人のためのRuby入門」