Clojure

REPL 編程:REPL 輔助開發指南

Clojure REPL 可用於各種目的,從學習語言到資料探勘到現場音樂表演。本章將提供一些指導原則,以將 Clojure REPL 應用於更常見的實用軟體開發案例。

REPL 是您程式碼的使用者介面

程式碼通常透過各種媒體提供使用者介面

  • 圖形:網頁、行動裝置和桌面應用程式

  • 網路:網路服務/HTTP API/…​

  • 儲存:程式碼會更新資料庫,然後可以查詢

  • 命令列介面 (CLI):透過終端機互動

您應該將 REPL 視為使用者與程式碼互動的另一種媒體;與上面列出的媒體相比,它需要進階知識(Clojure 編程!),但它也極具表現力且開發成本低,因為它幾乎不需要預測使用者會想要利用程式碼的哪些部分。例如,REPL 是非常適合臨時資料輸出的使用者介面。

在 Clojure 專案中,定義僅供 REPL 互動使用的函式和命名空間是很常見的做法:將其視為 CLI、儀表板等的替代方案。

不要沉迷於 REPL

REPL 可以讓您有很大的速度,但不要誤將動作當成進度。您應該使用 REPL 時務必要有計畫,否則 REPL 會讓您分心,而不是專注。如果您在使用 REPL 時難以在腦中記住計畫,請考慮將其寫下來

REPL 僅會引導你進行非常漸進式的變更,這容易讓你陷入「局部極大值」。當需要更策略性的思考時,強迫自己退一步。特別是,快速回饋無法取代軟體設計和有條理的解決問題。

別忘了儲存你的工作,並使其可存取

REPL 是一種非常短暫且獨家的媒介。如果要從 REPL 會話中獲得任何東西,它可能應該存在於你的有缺陷的人類記憶之外的地方(例如程式碼、測試、註解掉的程式碼、文件、資料檔案等)。

如果你在 REPL 中學到的東西是你專案的先決條件,你應該做一些額外的作業,讓其他貢獻者(包括幾個月後的你自己)可以存取它。

REPL 並非互動式開發的唯一工具

還有其他工具可在編程時提供緊密的回饋迴路

  • 自動重新載入測試套件(範例:Midje

  • 靜態程式碼分析工具(linter、靜態類型檢查器)

  • 熱程式碼重新載入(範例:Figwheel

  • 「視覺」測試套件(範例:Devcards

沒有理由將這些方法視為與 REPL 輔助開發「競爭」,而且 REPL 常常可以協助你使用它們。這些方法各有其優缺點:例如,REPL 使程式的執行非常具體,但卻是偵測中斷的拙劣工具。