Ruby bits ( 1 ) : Expression
Unless
Unless is more intuitive
用 unless 代替 if! 更加直覺
Unless with else is confusing
unless 和 else 一起用的時候令人困惑
NIL
NIL IS FALSE
因為 nil 的值等於 false 所以上面的程式可以簡化成下面這樣。
ONLY NIL IS FALSE
Rails 世界中只有 nil 的值是 false(除了 False 本身的值當然是 False 以外)。
inline condition
short circuit assignment
指的是使用 and(&&) 和 or(||)來縮減 if-else
Ex1 : if nil, default to empty array
Ex2 : sign in
一個常見的例子是用在「判斷使用者有沒有登入」,如果 session 中有 user_id 就去找到相對的 user。 session 中沒有找不到 user_id 時才導向登入畫面。
1 |
|
conditional assignment
現在有一個敘述i_was_set ||= 2
它的意思是如果 i_was_set 這個變數還沒被 assign 值,那就設定為2(下方的例子)。如果已經被 assign了值,i_was_set 的值保持原來 assign 的值(上方的例子)。
再看一個例子,如果變數未指定的話就會設成後面的值。
conditional return values
利用 =if 來減少重複的程式碼。原理是再function中裸寫出一個值時,其實意義上等於 return 剛剛寫下的那個值。舉例來說
1 |
|
會回傳"/#{user_name}/#{list_name}"
或"/#{user_name}"
,所以如果寫下
1 |
|
其實就等於
1 |
|
上式先判斷listname的值,再指定給option[:path],下式也是先判斷list_name的值,再指定給 option[:path]。可以發現兩者邏輯是相同的,只是書寫的方式看起來不同。
conditional return values (ex2)
1 |
|
1 |
|
CASE
case 的用法跟java不太一樣,但是其實意義上有點類似,ruby裡面的case流程判斷的else就是java裡面switch流程判斷的default。然後java設定條件的地方用關鍵字 case 而 ruby 用關鍵字 when。
CASE RANGES
1 |
|
CASE - REGEXPS
1 |
|
CASE - WHEN/THEN
1 |
|
這個設定滿方便,用java寫至少要拆成兩個物件才能夠取得return的值。(看不懂不要緊,我沒有說的很清楚,總之就記得ruby這樣的寫法是比較簡潔的即可)。