天天看點

笨辦法學 Python · 續 練習 49:`sed`練習 49:sed

練習 49:

sed

原文: Exercise 49: sed 譯者: 飛龍 協定: CC BY-NC-SA 4.0 自豪地采用 谷歌翻譯

當你學習如何制作快速而簡陋的黑魔法時,你在練習 9 中實作了一個“低配版”的

sed

。在本練習中,您将嘗試實作另一個精确的指令副本。在練習 48 的研究性學習中,您的任務是從您的

ed

實作中建立一個子產品。如果你沒有這樣做,那麼你需要為

sed

指令實作它,并且讓

sed

使用它。

你的流程怎麼樣?你是否發現它在這些更長的項目上給了你幫助?有沒有你認為需要改變的東西?你是否收集了名額,還是覺得你現在已經渡過了那個階段?花點時間開始這個練習,看看你的日志,看看自從你開始讀這本書以來,你已經改進了多少。

這個練習的挑戰是,從練習 48 中的

ed

項目中擷取代碼,并在該項目中複用它。“可複用性”的概念對于軟體的工作方式至關重要,但是很多時候,在項目中複用的計劃會導緻災難。人們經常設計軟體,以便每個元件可以在其他軟體中使用,但是在這樣做時,它們隻是使設計過于複雜,并沒有真正計劃在任何其他項目中使用任何東西。最好使軟體是離散的、獨立的,然後取出可以用的一部分,在啟動另一個項目時使用它。

我通常編寫我的軟體,不會擔心可複用性。我不在乎項目的部分是否将用于其他項目。我隻關心這一部分軟體工作良好,并且品質高。當我啟動一個新的項目,我會去看看我寫的其他東西,看看有什麼我可以再次使用的東西。如果我花時間在較舊的項目中拉出我可以使用的子產品。這使我的複用流程看起來像這樣:

  • 通過自動化測試,實作功能完整的高品質軟體。不要在乎用于其他軟體的任何其它部分。
  • 啟動一個新項目,它可能使用另一個項目的代碼。
  • 回到第一個項目,将代碼放入一個單獨的子產品,使這個第一個項目使用它,并且絕對不更改任何其它東西。
  • 在适當的地方使用這個子產品,一旦在原始的項目中,我的原始自動化測試運作良好,我就在新項目中使用該子產品。
  • 最後,嘗試在新項目中使用新子產品,會發現我需要在子產品中進行的更改。我将進行更改,并確定它們與原始軟體配合良好。

沒有自動化測試的情況下,你不能做到它,是以如果你的

ed

項目沒有測試,我想知道是否你讀了這本書。回去,并確定你的測試完全覆寫了

ed

項目。

挑戰練習

首先你要拉取

ed

項目的一部分,它處理指令,并把它放入

ed

所使用的子產品中,而不會破壞測試。實話說,這将成為這個項目最難的部分之一,因為

sed

大多隻是使用它們,而沒有

ed

的互動界面的模态本質。

接下來,您将要從練習 9 中擷取舊的代碼,并重新啟用它,或者在這個新項目上從零開始。一旦你确定了,你将開始使用ed子產品實作盡可能多的sed。這項工作的創造力在于,确定兩個項目需要使用什麼,然後将其放在子產品中。

這個實作中,你的目标是,制作一個

sed

指令的精确副本。這部分練習中沒有創造力。隻要試着盡可能小心,并使用自動化測試來确認,您的指令和原始的

sed

的工作方式是一樣的。

最後,當您處理

sed

時,您将在子產品中找到所需的東西。您需要對子產品進行更改,使其在

sed

中工作,然後傳回到

ed

并使其在那裡工作。這三個項目之間的彈跳流程将是一個挑戰,是以我建議你保持你的 45 分鐘的時間塊,是以你不會被上下文切換搞暈。

研究性學習

當你處理子產品時,你是否發現了任何程式設計習慣,使拉取代碼變得困難?它們是什麼?