輸入處理,功能實現,輸出處理,異常處理。
鐵人賽第三天,
今天在進入對於方法的『 輸入處理 』前:
第一個問題是,
答案:當然是正確。
你會說這問題太好笑了吧,
不!這真的很重要!
因為我們目標是寫出簡潔大方的資優生程式碼,
故太多不必要的程式碼定義是非常佔據效能與空間的。
那故事說回來,
大部分方法都會有某種形式的輸入,例如直接輸入 與 間接輸入。
參數輸入:
def month_in_year(num_months)
num_months * 12 * 30
end
類或模組中:
class MonthlyCalendar
MONTH_IN_YEAR = 12 * 30
def month_in_year(num_months)
num_months * MONTH_IN_YEAR
end
end
實體變數:
class MonthlyCalendar
def initialize
@start_date = Time.now
end
def time_n_month_from_now(num_months)
@start_date + num_months * 12 * 30
end
end
MonthlyCalendar.new.time_n_month_from_now(3)
第3行提出了一個特別的點,
這裡的 Time 被當成是類別『名』輸入而非常數、類別輸入。
原因是在 Ruby 中,類本身也是一種物件。而類名是一個普通的常數,
所以經過 initialize 定義了 Time 這個常數,Time 恰好被引用成一個類而已。
這也是一種特別形式的輸入。
舉例:
Time.now # 間接輸入
引用 Time 類,把 now 消息發送給 Time 。實際上所需要的是 now 的回傳值,而不是 Time 常數本身,這就是一種間接輸入。
舉例:
def month_in_year
12 * 30 # 定義一個計算一年天數的方法
end
也等同於以下:
MONTH_IN_YEAR = 12 * 30 # 將方法替換成常數
常數就好比定義、定量。它設定好的內容通常就不太會去變更。
所以通常這種方法功能是有限的。
其實是有的,
這將在下章節再深入探討變化:
間接輸入只能有一層嗎?
間接輸入如果帶層次與程式碼的影響?
間接輸入後的程式碼與環境的改變?
(也可以未看先猜XDD )
(跟著我一起翻開 『 優雅的 Ruby 』 一書,一起飛揚研究吧 )
簡單來說,就是『 對的人,放在對的事,與對的時間點,才會事半功倍 』
同樣的,要寫出好的程式碼(清晰度ok、健康度ok)就得先從輸入下功夫。
從根本下手,為方法準備輸入時需思考:
1.可用的輸入與方法之間所需要的角色如何建立關聯。
2.輸入處理的方法,以及本身可以容納多少類別、與如何協調。
讀完這篇章,翻翻曾經寫過的 Code ,
仔細閱讀曾經定義方法的地方與上述思考方式做結合,
再重新用自己的話去描述寫出來的程式碼進行表達,
會發現對於寫出資優生筆記的道路上,又再度往前一腳步了!
穩紮穩打才是基礎!一起加油!