什麼是意大利麵條代碼以及如何避免它
已發表: 2020-07-03雖然它可能是一頓美味的意大利晚餐,但你最不想听到的關於你的代碼庫的事情之一就是意大利麵條。 你的代碼像一盤意大利面一樣糾纏不清的想法令人恐懼,但對於很多開發人員來說,這個想法太抽象了,他們無法完全掌握它(或了解如何避免或修復它)。 這就是為什麼在這篇文章中,我們想深入探討意大利面代碼究竟是什麼,向您展示一些避免它的最佳實踐,以及(當它發生時)如何處理它。
訂閱我們的 YouTube 頻道
什麼是意大利面代碼?
意大利麵條式代碼是一場噩夢,就是這樣。 就像我們上面說的,俚語得名是因為,就像一團巨大的意大利面,如果你拉上一條(一段代碼),它最終會纏繞在另一條線和另一條線中,直到它或全部纏結的碎片斷裂。
例如,想想 CSS 中的 !important 屬性。 它非常強大,讓設計師可以覆蓋繼承的樣式並控制任何特定元素,而無需重新編碼整個樣式表。 但是,當他們(或未來的開發人員和設計師)需要調整其他內容時,他們可能會添加另一個!important標籤來覆蓋之前的標籤。 等等。 但是,如果您要返回並刪除或更改該堆棧中的任何一個,頁面上的任意數量的樣式都可能會中斷。
這是我們試圖避免的。
避免意大利面代碼的最佳實踐
1. 制定編碼標準
防止意大利麵條式代碼的第一種方法是在您的組織或項目中創建和編碼標準。 編碼標準使像 WordPress 這樣的項目成為可能。 數以千計的開發人員已經在 WP Core 上工作,但 WordPress 編碼標準已經使他們都在相同的準則下工作,並以相同的方式在相同的參數內執行任務。
編碼標準只是您強制執行的規則。 他們讓每個人的代碼都以相同的模式工作,以便於發現和修復錯誤,並且未來的開發人員(甚至您或您當前的團隊)可以盡可能有效地確切知道每一行代碼的作用。 如果 Susan 的代碼未通過其測試,則不會進入。如果 Janine 的代碼沒有要運行的測試,則拉取請求將被拒絕。 也許 Daniel 在他最近的拉取請求中沒有使用 div。 在事情分開之前不要合併。
此外,一些受意大利麵條式代碼困擾的原始代碼庫是沒有功能邏輯的舊語言。 代碼不是基於函數的,因此,各種邏輯針對代碼中的特定行。 對於小型項目,導航還不錯。 當您開始擴展項目時,直接引用特定文件和代碼行可能會阻礙該開發。 文件可能會丟失,行可能會被刪除或編號錯誤。 調試它以找出哪條意大利麵條被拉出可能需要數百人小時。 擁有編碼標準可以防止這種混亂經常發生。

因此,通過制定標準,您已經非常有效地降低了擁有意大利麵條式代碼存儲庫的機會。 如果您想了解更多關於一般編碼標準的信息,GeeksforGeeks 有一個很好的指南。
2. 遵循風格指南
除了編碼標準之外,遵循風格指南也可以防止您的代碼變得過於混亂。 雖然理論上聽起來很相似,但兩者卻大不相同。 編碼標準是您的開發人員遵循的可執行規則,以保持代碼高效運行。 這些可能會因項目而異,也可能因組織內的團隊而異。
然而,風格指南通常是逐個語言編寫的,提供了一系列使代碼可讀和實用的最佳實踐。 例如,Airbnb 為 React.js 創建了最好的風格指南之一。 如果您不是 React 開發人員,那麼這幾乎意味著什麼。 但是對於 React 開發人員來說,查看這一點可以為您的代碼的結構和編寫方式提供真正的幫助,以便未來的開發人員盡可能地對其進行排序。
與一般編碼標準相比,風格指南不一定是可執行的規則。 他們建議使代碼更加統一,從而使代碼更易於閱讀。 這可以防止意大利麵條式代碼,因為您在任何給定時間都準確地知道您在拉什麼線。
3. 註釋你的代碼
代碼註釋可能是防止您的存儲庫被意大利麵條式代碼填滿的最簡單方法。 當你寫一些東西時,創建一個關於它的作用的評論。 如果它是一個複雜的函數或片段,請解釋邏輯的作用以及它為什麼重要。
但是,您會遇到一些依賴代碼註釋來防止混亂的問題。 首先是它為項目增加了很多額外的時間。 當您急於趕上最後期限或確保某個功能正常工作時,並不總是首先想到要寫出詳細說明。 如果您開始評論並在項目中期失敗,或者下一個開發人員不會繼續? 那是一大盤意大利面。
其他人對評論他們的代碼的想法感到不知所措——或者如果他們以前沒有做過,那麼學習評論他們的代碼——因為他們開發的數量龐大。 這是完全有效的。 但是,即使您偶爾對重要的(甚至不穩定的)台詞或片段發表評論,您也會為某人(可能是您自己)省去過去拉扯它並試圖弄清楚它的作用的麻煩。
包起來
意大利面代碼是一場噩夢,我再說一遍。 花費無數個小時試圖找出在巨大的存儲庫中更改了哪一行代碼是作為開發人員最糟糕的部分之一。 調試很好(ish)。 調試並且不知道從哪裡開始或什至遠程導致問題的原因不是。 但是,如果您的團隊制定了編碼標準,遵循了語言風格指南,並且甚至有一個較小的代碼評論政策,那麼您的意大利麵條數字盤就很有可能比其他情況要少得多。
您如何防止意大利麵條式代碼?
文章特色圖片由 Donnay Style/shutterstock.com 提供
