# Ruby 語法整理 ### 浮點數 puts 3.55.round #轉成整數 四捨五入 puts 3.55.floor #轉成整數 無條件捨去 puts 3.55.ceil #轉成整數 無條件進位 puts 3.55.to_i #轉成整數 無條件捨去 ### IF ```ruby= weather="下雨" if weather=="下雨" puts="宅在家裡" end ``` (倒裝寫法) ```ruby= puts "宅在家裡" if weather=="下雨" ``` ### if else 二分法 ```ruby= age=19 if age>=18 status="成年" else status="未成年" end ``` 或使用三元運算子 ```ruby= status=(age>=18) ?("已成年"):("未成年") ``` ### if...elsif...else ```ruby= weather="太陽" if weather=="太陽" puts "出去玩!!!" elsif weather=="下雨" puts "宅在家裡!!!" else puts "睡覺" end ``` ### case...then ```ruby= weather="下雨" case weather when "下雨" puts "宅在家裡!!!" when "太陽" puts "出去玩!!!" else puts "睡覺" end ``` ### while迴圈 ```ruby= x=0 while x<10 puts x x+=1 end ``` ### loop迴圈 ```ruby= i=0 loop do puts i i+=1 break if i>10 end ``` ### method式迴圈 ```ruby= 5.times do puts i end ``` ```ruby= 1.upto(10) do |i| puts "hello ruby #{i} " end ``` ```ruby= 10.downto(1) do |i| puts "hello ruby #{i} " end ``` ### 迭代式迴圈 ```ruby= names = ["eddie", "joanne", "john", "sherly"] names.each do |name| puts name end ``` #### 在名前列出索引值外鄉人寫法 ```ruby= names = ["eddie", "joanne", "john", "sherly"] x = 0 names.each do |name| puts "#{x} #{name}" x += 1 end ``` ### 內行人使用.with_index ```ruby= names = ["eddie", "joanne", "john", "sherly"] names.each.with_index do |name,x| puts "#{x} #{name}" end #.with_index 給陣列加上序號 ``` ### 建立陣列 使用Array或是[中括號]的類別建立 a=array.new b=[] ```ruby= list = %w(ruby php python) p list # 印出 ["ruby", "php", "python"] ``` %w = 中括號裡面的內容會視為字串 #### 使用陣列 ```ruby= heroes = ['孫悟空', '魯夫', '宇智波佐助', '一拳超人', '流川楓', '黑崎一護', '劍心']; puts heroes[0] # 印出 孫悟空 puts heroes[1] # 印出 魯夫 puts heroes[-1] # 印出 劍心 puts heroes[-2] # 印出 黑崎一護 ``` 陣列都由0開始計算,由前呼叫陣列輸入[0] 若由後往前的話輸入負數即可 ### Ruby特有寫法-使用First、last *(在rails裡才有second的用法) ```ruby= heroes = ['孫悟空', '魯夫', '宇智波佐助', '一拳超人', '流川楓', '黑崎一護', '劍心']; puts heroes.first # 印出 孫悟空 puts heroes.last # 印出 劍心 ``` ### .length 知道陣列長度 ```ruby= heroes = ['孫悟空', '魯夫', '宇智波佐助', '一拳超人', '流川楓', '黑崎一護', '劍心']; puts heroes.length #印出7 ``` ### .push or << 在最後面增加陣列人數 ```ruby= heroes = ['孫悟空', '魯夫', '宇智波佐助', '一拳超人', '流川楓', '黑崎一護', '劍心']; heroes << '鳴人' 或是 heroes.push ('布羅利') ``` ### map(等同於collect)用法 對集合裡的每一個元素進行計算,並收集成一個新的集合 ```ruby= list=[1,2,3,4,5] p list.map {|x| x*2} #印出[2,4,6,8,10] ``` ### select(等同於filter,反義為reject)用法 挑選集合裡符合條件的元素,並收集成一個新的集合 ```ruby= p (1..10).select {|x| x<5} #印出[1,2,3,4] ``` ### reduce(等同於inject)用法 對集合裡的每個元素進行計算,並將所有計算歸納成單一結果 ```ruby= p (1..10).reduce { |sum , x| sum + x } #印出55 ``` ### compact用法 取消陣列裡的空集合(nil) ### sort用法 將陣列裡的元素由小至大排序 ### uniq用法 將陣列裡重複的元素刪除 ### Range標示 (0 . . 5) => 0~5的整數 (0 . . . 5) => 0~4的整數 ('A' . . 'Z')=> A-Z ### shuffle用法 為將陣列打成亂數 ### sample用法 直接將陣列裡的物件取樣出來 ### 雜湊標示 a=hash.new 大括號 B={} ```ruby= p profile = {name:'bb' , age= 18} profile={:name=>'bb' , :age=>18 } #印出的結果 #因Hash有兩種寫法 #舊式hash寫法 1.profile = {:name=>'bb' , :age=>18 } #ruby1.9版本後新式寫法(類似json) 2.profile = {name:'bb' , age= 18} ``` ### keys&values用法 ```ruby= profile.keys #印出 [:name , :age] profile.values #印出 ['bb' , 18] ``` ### 其他方法 .to_a 表示轉型為陣列 .to_s 表示轉型為字串 .to_sym 表示轉型為符號 .object_id 回傳物件的識別編號 .sort 表示由小排至大 ! 表示此程式碼須注意且會破壞原本的陣列型態 ? 表示會回傳真假值回去 require 載入某個檔案並永遠只會載入一次(檔案可以省略.rb) load 載入某個檔案且載入幾次就會執行幾次 yield 將控制權轉讓給Block block_given? ruby內建方法,找尋block是否存在 Proc 使Block變成物件 Proc.new {|n| n+2} lambda 同Proc後面不需寫.new -> 同樣使block成為物件 參數放置前方 ->(n){n+2} .call 呼叫Proc,帶入參數給Proc的物件 類別方法:在方法前面寫上self即可使用 .capitalize 使英文字母第一個字變大寫 .split() 根據某個字元將其拆開且成為字串 %05d % 20 = 使用此語法表示顯示5位數的數字,後面接數字會自動將前方的數字補零 印出 00020 的數字 (5可更改,d可以換成i一樣的意思) %q 表單引號 %Q 表雙引號 %w 表中括號裡面的內容會視為字串