iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0

鐵人賽第四天!簡單整理下昨日分享的輸入方法有兩種:

直接輸入:直接把值本身當成輸入。

間接輸入:透過多種輸入來傳遞消息,取得回傳值,而回傳值內容才是我們要的。

延續昨日的主題,
我整理了兩點 『 優雅的 Ruby 』裡比較觀念上的想法進行提出分享。

方法來自外部的影響:(舉例來說)

ENV, 是 Ruby 中的環境變數 。
舉例來說,寫一個方法:

# =-=-=-=-=-=-=-=-=-=-=-=-=-=
# 1-6
def format_time
  format = ENV.fetch('TIME_FORMAT'){ '%Q%r' }
  Time.now.strftime(format)
end

format_time # "2021-09-09T01:33:23 AM"
# =-=-=-=-=-=-=-=-=-=-=-=-=-=
# 8-9
ENV['TIME_FORMAT'] = '%FT%T%:z'
format_time # "2021-09-09T01:33:23 - 04:00"

這裡 1-6行裡的 TIME_FORMAT 本身就是應用在每個記錄行的時間戳格式。
我們把它當成 常數 輸入於格式方法中,再輸出當前時間。
這是屬於一種 『 外部的輸入 』。
然而,轉到第 8-9 行,
原本應 ENV 格式化輸出的,也因為受到外部環境變數影響( TIME_FORMAT )成了間接輸入。

因此當程式碼的關聯性程式碼關聯性的互動越多,一但環境改變,方法也會跟著改變,
因此這不一定是好事。

WOWOWO!

如果你知道 最少知識原則(LKP)(迪米特法則)

間接輸入的優化方式,在這法則上的應用的確是不錯的解法。

這比喻一個對象應當對其他對象盡可能地少了解,並且不和陌生人說話。
不要以為它孤僻,

就拿正在進行的專案開發來說,
在功能開發的分配內容裡,越明確且關聯條件的重複率越低,效率是越高。
因為同時你也創造了在第三人快速取用你的開發功能時,能確保一目瞭然且無需交談,自然也省去了很多交流時間。

此外,在 Ruby 世界中這第三人的動作,也能模擬成是『封裝』。
(而所謂封裝的定義就留給大家查詢吧~畢竟我們把重心放在方法上。)

連續兩天的收集輸入為基礎概念分享後,
今天暫以短篇分享做為『 收集收入的方法-- 間接輸入 』來結尾吧。
明天將開始正式進入『 收集收入 』的應用練習題!
好好的摩拳擦掌!一起朝資優生筆記!
關關難!關關過!


註:

(%Q %r ,是ruby中一種轉譯符號的用法,也有更精簡的縮寫概念。
欲深入了解~可參考手冊API。)

搜尋: 迪米特法則(Law of Demeter, LoD)


上一篇
方法的輸入處理,其實不簡單!
系列文
寫出優雅的 Ruby ! (衡量自我學習時間,轉為雞湯系列再出發! )4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言