iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
0
Software Development

Ruby 研究 30 天系列 第 8

Day 7 - 流程控制與條件判斷

  • 分享至 

  • xImage
  •  

流程控制 條件判斷

每種語言都有自己處理布林值的方式,Ruby 也有自己的處理邏輯,要釐清何者為真、何者為偽的規則非常簡單,在 Ruby ,除了 false 和 nil ,其他所有的值都是真。 - Effective Ruby

nilfalse 都是物件,有自己的類別。想像用一個存在的東西來表示一個不存在的東西, Ruby 用 nil 來表示「空的」、「不存在」的概念。且 Ruby 跟其他語言有些不同,這裡的 0true

nil.class  # 印出 NilClass
nil.nil?   # 印出 true
0 == nil?  # 印出 false
  • 判斷語句主要有三種:ifunlesscase
  • 條件判斷中常用到的比較運算符號: ==><=!
  • 一個 = 是指定、兩個 == 是比較、三個 === 是判斷
  • 比較的結果為 truefalse

if..elsif..else..end

在 Ruby 裡的 else if 是寫成 elsif,沒寫對會出現文法錯誤。

狗派或貓派 = "選擇障礙"

if 狗派或貓派 == "貓貓"
  puts "最喜歡貓貓了"
elsif 狗派或貓派 == "狗狗"
  puts "最喜歡狗狗了"
else
  puts "小孩子才做選擇"
end

# 印出 小孩子才做選擇

三元子運算 true:false

如果只有 if else:

age = 18
puts age >= 18 ? "你是大人了" : "快點長大吧"

case..when

如果很多 elsif:

 weekday = "禮拜二"

  case weekday
  when "禮拜一"
    puts "忙day..."
  when "禮拜二"
    puts "求死day..."
  when "禮拜三"
    puts "未死day..."
  when "禮拜四"
    puts "受死day..."
  when "禮拜五"
    puts "福來day!"
  when "禮拜六"
    puts "灑脫day!"
  else
    puts "傷day..."
  end
  
  # 印出 求死day...
  • 寫在方法裡
    定義一個判斷是否為奇數的方法:
def is_odd(n)
  (n % 2 == 1) ? true : false
end

is_odd 3   # 印出 true
  • 寫在 block 裡
    選出 1 到 10 包含的所有奇數:
(1..10).select {|num| num % 2 == 1}  # 印出 [1, 3, 5, 7, 9]
  • 寫在 if..else裡
    以下是 Rails 的一段程式碼,這裡說明一個會員制投票系統,須先判定是否登入?如果有登入才在裡面判斷投票成功與否:
def vote
    if user_signed_in?

      log = current_user.vote_logs.new(candidate: @candidate,
                                       ip_address: request.remote_ip)

      if log.save
        message = "投票成功"
      else
        message = log.errors.full_messages.first
      end

      redirect_to root_path, notice: message
    else
      redirect_to root_path, notice: '請先登入會員!'
    end
  end

參考資料:
為你自己學 Ruby on Rails

此文同步刊登於CJ-Han的網站


上一篇
Day 6 - Symbol in Ruby
下一篇
Day8 - 邏輯運算子
系列文
Ruby 研究 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言