何もかもが初心者ですが

プログラミングもアウトプットもブログも初心者ですが、初心者なりに成長するためにブログを書こうと思います

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入門」