# 3/19 - Ruby ## 兩種貼紙:變數&常數 ### 變數 Variable 要有意義的命名 變數本身沒有型態,但被指到的會有 ### 常數 Constants 只要是大寫開頭的就是常數,不需特別定義 其他程式語言不能改常數,但Ruby可以 ### 等號=的右手邊,是要運算的東西,就會丟回左邊的標籤 ``` Cx = 1 Cx = 2 puts Cx Ans: 2 ``` 常數不能重新指向新的陣列,但可以改裡面的內容 ``` Cx = [1,2,3] Cx = [3,3,3] 上面不會成立 Cx = [1,2,3] Cx[0] = "a" p Cx Ans: ["a",2,3] ``` ``` a = 1 // a 指向 1 b = a // b 指向 a (也等於指向1) ``` ``` a = a + 1 等同於 a += 1 (蠻多工程師這麼寫) ``` ``` #a = truth / false a = a || 1 // or puts a Ans: 1 ``` 如果 or 前面的是假的,就會印出後面的東西,即便是假的。 Ruby世界中,只有 nil & false 都是假的 --- ### 變數命名方法 Ruby中,用蛇式為多 snake case: my_room kebab case: my-room --- ### 關鍵字保留 系統的內建字 if, while --- ### 單引號 雙引號 單引號不會翻譯 --- ### 等號 一個等號。指定 = 兩個等號。比較 == (三個也是比較) ### 倒裝句 ``` weather = "rain" if weather == "rain" puts "stay home" end \\ 上下的公式相同 // puts "stay home" if weather == "rain" ``` 三元運算子:短程式碼 (先求有,之後再看要不要學) --- ### 符號 Symbol 簡單,但不容易說明。 ``` x = 1 label value :a 前面有一個冒號 ``` # Ruby中,每個物件都會有ID,而且每個物件印出都會不一樣; 不過符號的卻一樣 # .object_id // 有一個固定的公式 ``` {name: 'kk', age:18} 上下的公式相同 {:name=>"kk", :age=>18} a[:name] Ans: "kk" ``` --- ### 方法 method/ 函數 function(JS) #### def ``` def pi return 3.14 end ``` #### 寫函數、寫方法的目的,是要讓上面的 方法 有意義/起名 method : 操作物件 ``` def say_hello_to(name) #參數 出現在定義的時候 puts "hello, #{name}" #帶入引數的值 end say_hello_to('kitty') #引數 arguments say_hello_to('nancy') ``` ### 區域變數 若同名,呼叫出《變數》的優先權大於《方法》 ( )可看情況適合省略,不過括號是 明顯的呼叫方法 --- ### return : 回傳,交回控制權,強制中斷方法往下進行 ``` return // 把控制權 還給 原來呼叫的人 return 1 // 歸還控制權,並送一個 1 回傳值 回去,前提是呼叫的人有 puts ``` ### 在Ruby中,return可以適時省略 ### (如放在最後一行,或是唯一的一行,就會是return) ### ***方法中的最後一行,如果沒有特別指定,預設會是 return* ** ``` def age 1 2 20 // 這裡會預設放 return end puts age Ans: 20 ``` false 是一個存在的值,所以不需要透過p,就可印出來; nil 就需要透過 p 印出來。 puts 只是印出方法,沒有回傳值 p 的回傳值就是印出來的東西 p 可印出完整個框架,含回傳值(nil也會印出來) ![](https://i.imgur.com/Vu5y8GW.png) 上面會印出 10 , 20 --- ``` def user_list return [ 'a', 'b', 'c'] end x,y,z = user_list Ans: "a" "b" "c" ```