Try   HackMD

Ruby 變數與常數、字串與數字、流程控制

tags: Ruby

參考

Ruby Coding Style
Rubygems

$ gem install 套件名稱

Hello World

puts "hello, ruby"

comment

=begin
這是多⾏註解
這裡的內容不會被執⾏
這裡的內容不會被執⾏
這裡的內容不會被執⾏
=end

# 這是單⾏註解
# 這裡的內容不會被執⾏
# 這裡的內容不會被執⾏
# 這裡的內容不會被執⾏

變數與常數 Variable and Constant

變數 Variable

# 區域變數 username = "koko" # 全域變數 $username = "koko" # 實體變數 @username = "koko" # 類別變數 @@username = "koko"
# 現有 x 跟 y 這 2 個變數: # x = 2 # y = 3 # 請寫一段程式,讓 x 跟 y 變數的值對調 # ans 1 x = 2 y = 3 temp = x x = y y = temp p x p y # ans 2 x = 2 y = 3 x = x + y y = x - y # y = 2 x = x - y # x = 3 p x p y # ans 3 x = 2 y = 3 x, y = y, x p x p y

常數 Constant

# 大寫字母開頭的就是常數 BOOK = "ruby book" User = "hello, user" # 但在 Ruby 世界的常數是可以被修改的

字串與數字

# 字串串接 name = "kk" age = 18 puts "hi, I am #{name}, and I am #{age} years old" puts 'hi, I am #{name}, and I am #{age} years old' # 失敗 # 跳脫字元 puts 'Hi, I\'m 28 years old' # 單引號與雙引號 # 效果等同雙引號 puts %Q(hi, I am #{name}, and I am #{age} years old) # 效果等同單引號 puts %q(hi, I am #{name}, and I am #{age} years old) #失敗 # 整數與浮點數 puts 3.55.round # 轉成整數,四捨五入 puts 3.74.floor # 轉成整數,無條件捨去 puts 3.14.ceil # 轉成整數,無條件進位 puts 3.14.to_i # 轉成整數,無條件捨去 # 除法 puts 10/3 # 整數除以整數得到整數 3 puts 10.0/3 # 3.3333333 puts 10/3.0 # 3.3333333 puts 10.0/3.0 # 3.3333333 # 在 Ruby 裡,數字其實也是「物件」

邏輯判斷與流程控制

只有 nil 跟 false 是假的,其它的都是真的

等號判斷

a = 10 b = "10" p a == b # 印出 false p a === b # 印出 false

if

weather = "下雨" if weather == "下雨" puts "宅在家裡" end # 倒裝句 if modifier weather = "下雨" if weather == "下雨" puts "宅在家裡" end # 與以下程式相等 puts "宅在家裡" if weather == "下雨"

unless

weather = "出太陽" if not weather == "下雨" puts "耶!出去玩!" end # 與以下程式相等 unless weather == "下雨" puts "耶!出去玩!" end # unless 倒裝句 puts "耶!出去玩!" unless weather == "下雨"

if .. else ..

weather = "下雨" if weather == "下雨" puts "宅在家裡" else puts "出去玩!" end

三元運算子 Ternary Operator

age = 19 if age >= 18 status = "已成年" else status = "未成年" end # 與以下程式相等 status = (age >= 18) ? "已成年" : "未成年"

elsif

weather = "下雨" if weather == "下雨" puts "宅在家裡" elsif weather == "出太陽" puts "出去玩!" else puts "睡覺!" end

case .. when ..

weather = "下雨" case weather when "下雨" puts "宅在家裡" when "出太陽" puts "出去玩!" else puts "睡覺!" end

Ruby 的 case.. when.. 特異功能

age = 10 case when age >= 0 && age <= 3 puts "嬰兒" when age >= 4 && age <= 10 puts "兒童" when age >= 11 && age <= 17 puts "青少年" else puts "成年" end
age = 10 case age when 0..3 puts "嬰兒" when 4..10 puts "兒童" when 11..17 puts "青少年" else puts "成年" end

事實上 Ruby 裡其實並沒有 case .. when ..,這樣的寫法其實只
if .. elsif .. else 的語法糖衣。

例外處理 begin..rescue

def bmi_calculator(height, weight) weight / (height * height) end p bmi_calculator(0, 80) #zeroDivisionError
def bmi_calculator(height, weight) begin weight / (height * height) rescue "輸入的數字有問題" end end p bmi_calculator(0, 80)

再簡化一點

def bmi_calculator(height, weight) weight / (height * height) rescue => exception "輸入的數字有問題" end p bmi_calculator(0, 80)