歡迎來到「預先規劃」(Thinking Ahead)!
在本章中,我們將探討程式設計師在動手寫程式之前是如何規劃工作的。想像一下專業廚師在準備繁忙的晚餐時段:他們不會直接開始烹飪,而是會先檢查食材、準備工具,並思考如何在高峰時段加快出餐速度。在計算機科學中,我們稱這種準備功夫為預先規劃(Thinking ahead)。
研讀完這些筆記後,你將能理解如何界定程式啟動的需求、明確預期的輸出結果、處理先決條件,以及透過快取(Caching)和可重用性(Reusability)來優化程式執行效率的巧妙方法。
1. 識別輸入與輸出
每一個電腦程式本質上都是一個處理機器:它接收某些事物,進行處理,然後產出結果。
什麼是輸入(Inputs)?
輸入是指進入系統的數據或訊號。這些不一定只是使用者鍵入的資訊!輸入的來源可以包括:
- 使用者輸入:輸入名字、點擊按鈕,或是使用遊戲控制器。
- 感應器:溫度計的讀數或全球定位系統(GPS)的座標。
- 檔案/資料庫:讀取儲存的高分紀錄或客戶名單。
什麼是輸出(Outputs)?
輸出是指系統在處理輸入後產生的結果。例如:
- 視覺:螢幕上顯示的資訊或列印出來的收據。
- 物理:機器手臂的動作或加熱器的啟動。
- 數據:儲存檔案或發送電子郵件。
現實生活中的例子: 想像一下自動販賣機。輸入就是你投入的錢和輸入的代碼(例如「A1」)。輸出就是掉下來的那份美味零食。
快速回顧:
要識別輸入和輸出,請隨時問自己:「電腦在開始前需要知道什麼?」以及「使用者希望看到的最終結果是什麼?」
2. 確定先決條件(Preconditions)
先決條件(Preconditions)是指程式或特定函式在成功執行前必須滿足的條件。如果未滿足這些條件,程式可能會崩潰或得出錯誤的答案。
為什麼需要先決條件?
設定明確的先決條件能讓程式更可靠、更容易除錯。與其在複雜的函式「內部」檢查錯誤,不如在函式執行「之前」確保一切狀況完美。
範例: 如果你正在編寫一個計算平方根的函式,一個先決條件就是輸入的數字不能是負數(除非你在處理複數!)。
常見錯誤:
不要將先決條件與程式碼本身混淆。先決條件是一種在程式執行前必須存在的「狀態」。例如,要讓二分搜尋法(Binary Search)運作,列表必須已經排序。「列表已排序」就是該函式的先決條件。
重點總結:
先決條件就像是函式的「條款與細則」。如果這些條件不滿足,函式將無法保證產出正確的結果。
3. 快取的威力(The Power of Caching)
快取(Caching)(讀音類似 "cashing")是指將曾經使用過的數據儲存在臨時的高速儲存區中,以便在未來需要時能更快速地讀取。
運作原理
想像你在寫作業時,必須不斷查閱一本厚重課本裡的同一個定義。與其每次都跑去書架查書,不如把定義寫在便利貼上貼在桌子旁。那張便利貼就是你的快取(cache)。
快取的優點:
- 速度:從快取中檢索數據比從主要來源(如硬碟或網際網路)提取快得多。
- 效率:減輕中央處理器(CPU)的工作負載並節省網路頻寬。
快取的缺點:
- 複雜度:決定儲存什麼數據以及何時刪除它們,對程式設計師來說是有挑戰性的。
- 過期數據(Stale Data):如果原始數據已變更,但快取未同步更新,程式就會使用「過期」(錯誤)的資訊。
你知道嗎? 當你瀏覽網頁時,網頁快取(Web caching)無處不在。你的瀏覽器會儲存你常訪問網站的圖片,這樣你每次重新整理頁面時,就不必重新下載所有內容!
快取總結:
快取 = 速度。 它對提升效能極有幫助,但必須小心確保數據不會過期。
4. 可重用程式組件(Reusable Program Components)
在「預先規劃」階段,優秀的程式設計師會尋找只寫一次程式碼但能多次使用的方法,這些被稱為可重用程式組件。
可重用組件的類型:
- 函式(Functions)與程序(Procedures):執行特定任務的小型程式碼區塊(例如:計算稅額)。
- 函式庫(Libraries):預先寫好且任何人都能使用的函式集合(例如:用於三角函數的「數學」函式庫)。
- 子常式(Subroutines):程式中可以從任何地方被「呼叫」的特定部分。
可重用性的優點:
1. 節省時間:你不需要「重新發明輪子」。
2. 更易於測試:如果一個組件被重複使用,通常代表它已經過測試並證明是有效的。
3. 標準化:確保在整個大型專案中,執行同一個任務的方式都是一致的。
如果初次接觸覺得困難也別擔心…… 只要記得可重用性就像使用樂高積木。你不會在每次想蓋房子時都重新模塑一個新的塑膠積木;你會直接使用你現有的標準積木!
記憶口訣:可重用性的「T.E.D.」原則
T - Tested(已測試:確保運作正常)
E - Efficient(高效:節省編碼時間)
D - Dependable(可靠:結果一致)
快速複習測驗
用以下三道題檢查你的理解程度:
1. 如果程式要求輸入你的「出生日期」,這屬於輸入還是輸出?(答案:輸入)
2. 使用快取的主要風險是什麼?(答案:數據過期或資訊錯誤)
3. 為什麼使用預先寫好的函式庫是一個好主意?(答案:它們已經過測試,且能節省開發時間)
考試小貼士:當被問及關於「預先規劃」時,一定要提到它的核心在於規劃執行效率並減少未來的工作量。