前言:
因為 JavaScript
語言是一門極其鬆散、極其自由的語言,這意味著我們可以隨心所欲的操作它,這是他的優點,但同時也是它的缺點。在編碼過程中,我們需要一種良好的規範或者習慣來保持應用程式的一致性和可維護性。而今天我們要說的就是,怎麼在日常編碼中透過一些的良好的編碼習慣,從你編碼的基礎層面就能使得你的 JavaScript
程式碼可以更好維護。
什麼是可維護性?
很多人學習前端,可能是從各種不同的渠道獲取學習資源,影片教學、看書等等,而每個人可能多多少少會有自己的一些編碼習慣,當然如果是良好的習慣,我們就繼續保持。可維護性的概念在我們整個開發流程中都適用,因為涉及內容太多,本文暫時只對 JavaScript 的可維護性進行說明。
什麼是可維護性的程式碼?
可維護性的程式碼具備以下特點:
- 容易理解:我們在讀一段程式碼時,能夠很清楚的知道它是什麼功能,需要什麼資料,不管是自己重看還是別人來維護你的程式碼,都能輕鬆看懂;
- 符合常識:這點不太好定義,簡單來說就是程式碼在需要的地方出現,不需要的地方不要出現,每個模組都能夠實現自己該實現的功能,無論總體的操作是多麼複雜;
- 容易適配:也就是程式碼具有通用性,思想接近我們瞭解的 工廠模式。我們不需要在資料發生改變時重新對方法進行處理,只需要在使用時傳入我們的資料,然後返回我們需要的結果;
- 容易擴充套件:在程式碼的初始架構階段,要有良好的設計,核心的功能要在未來能夠支援擴充套件;
- 容易除錯:在程式碼執行出現問題時,我們需要能夠直觀的看到報錯,並能夠準確定位出現問題的地方。這個有很多方式,大家感興趣可以下去了解。
提高可維護性的編碼規範
保持程式碼可讀性
- 保持程式碼可讀性的首要條件是縮排。這個對於團隊開發來說非常重要,在一個專案中保持一致的縮排能夠極大程度上的提高程式碼的可讀性。這裡的縮排通常指我們的
Tab
鍵,一般來說是四個空格,這個需要看團隊成員的編碼習慣大家共同商議; - 時刻保持程式碼註釋。這是最簡單也是最多人容易忽略的地方,特別是專案長期有自己一個人負責維護,這時候我們就會覺得只要自己能看懂就行。然而最後我們自己寫的方法甚至都需要反覆確認才能知道具體功能。所以我們應該養成寫註釋的習慣,每個方法、關鍵變數以及關鍵邏輯都進行註釋。以下是我們覺得必須寫註釋的地方:
- 函式和方法
- 完成同一任務的大型程式碼塊
- 使用了複雜演算法的程式碼
- 個性化的程式碼,一些必要但是隻有我們能知道功能的程式碼“黑科技”
變數及函式規範命名
對變數和函式名保持規範命名,以達到見名知義,不要使用一些無意義的命名,比如:a、b、c、foo等。關於命名規範分為以下幾點:
- 變數名應該是符合意思的名詞,比如 student;
- 函式名通常以動詞開始,使用小駝峰命名法,如果是獲取 Boolean 值的函式,則以is開頭使用小駝峰命名法;
- 變數名和函式名如果表示的含義比較長也不用擔心,只要符合含義並使用小駝峰命名即可;
- 常量名全部大寫,並且以下劃線(
_
)拼接,例如 START_TIME; - 名稱在可能的情況儘量直觀。
程式碼型別透明化
因為我們 JavaScript 對是非常鬆散型別的語言,對變數的型別並沒有要求,所以很可能在使用過程中造成型別不匹配的錯誤。透過以下方式能夠很好的避免:
- 適當命名,變數命名要符合含義
- 初始化變數時,表明變數型別
- 寫好註釋
程式碼保持”鬆散耦合“
應用程式的某一部分對另一部分的依賴過於緊密,那麼程式碼就會變得緊密耦合(高耦合),而我們程式設計界有一句流傳甚廣的至理名言:高內聚、低耦合,緊密耦合會導致我們的程式碼非常難以維護。
比較典型的問題就是在一個物件中引用另外一個物件,物件相互不獨立。這導致一個物件有修改時還必須同時修改另一個。
所以我們要有鬆散耦合的意識,時刻注意不要讓程式碼產生緊密耦合。
- 解耦 HTML/JavaScript
我在專案開發過程中,最常見的就是 HTML/JavaScript 耦合。這是因為它們之間要互動操作,需要透過不同的
方式將這兩種技術聯絡起來。可惜的是,其中一些方式會導致 HTML 與 JavaScript 緊密耦合。
具體表現在:我們會在 JavaScript 程式碼中操作頁面元素,也可能直接在 HTML 程式碼中新增 事件處理程式程式碼。這就導致我們每次修改 JavaScript 程式碼的同時可能還需要修改 HTML 程式碼。
那麼我們應該怎麼做呢?
- 儘量避免在 JavaScript 中建立大量的 HTML;
- HTML 渲染應該儘可能與 JavaScript 分開。
總的來說就是,解耦 HTML 和 JavaScript 可以節省排錯時間,因為更容易定位錯誤來源。同樣解耦也有助於保證可
維護性。修改行為只涉及 JavaScript,修改標記只涉及要渲染的檔案。
- 解耦 CSS/JavaScript
Web應用的一個關鍵組成部分是 CSS,它主要承擔著頁面展示的職責。JavaScript 與 CSS 都是基於HTML構建的,因此它們常常被聯合使用。就像 HTML 和 JavaScript 經常緊密結合一樣,CSS 也可能與 JavaScript 形成緊密的耦合關係。
CSS 負責頁面的樣式顯示,所以任何樣式的問題都應該透過 CSS 檔案解決:
那麼當需要動態樣式時,我們應該如何做呢?
- 透過修改元素的 CSS 類名,不要直接在 JavaScript 程式碼中修改樣式;
- 保證層與層之間的適當分離。顯示問題就只在 CSS 中去解決,保證跟 JavaScript無關。
- 解耦應用程式邏輯/事件處理程式
將應用程式邏輯與事件處理程式分開,各自負責處理各自的事情。事件處理程式應該。事件處理程式應該專注於 event 物件的相關資訊,然後把這些資訊傳給處理應用程式邏輯的某些方法。
以下是在分離應用程式邏輯與業務邏輯時需要考慮的幾個要點:
- 避免將整個 event 物件傳遞給其他函式,而應只傳遞 event 物件中的必要資料。
- 應確保應用程式中的每個操作都能夠在沒有事件處理器的情況下執行。
- 事件處理器應專注於處理事件本身,並將進一步的處理任務委託給應用程式邏輯。
遵守這些原則可以顯著提高程式碼的可維護性,併為未來的測試和開發工作帶來更多的靈活性。
一些值得提倡的編碼慣例
我們在工作中,通常是多人協作一個專案。這就意味著需要保持一致的規則,才能讓我們的應用程式保持統一,不至於後期無法維護。這些都需要我們在在最初的時候約定好,並輸出規範。
以下幾點是我們在開發中值得提倡的一些慣例:
- 尊重物件所有權
JavaScript 的動態特性意味著幾乎可以在任何時候修改任何東西。而在團隊或者企業開發中,我們首先要做到的就是完全的尊重物件所有權。這意味著你只能修改屬於你自己的物件,不要修改任何不屬於你的物件,這裡的修改包括:新增、修改、刪除、重寫,無論這個物件來自哪裡。
具體一些就是:
- 不要給例項或原型新增屬性。
- 不要給例項或原型新增方法。
- 不要重定義已有的方法。
以上規則不僅適用於自定義型別和物件,而且適用於原生型別和物件,比如 Object、String、
document、window,等等。
但是有個問題是,我們有時候雀食需要在別人的物件基礎上進項加工,功能可能大差不差,但是細微差別。這時我們可以按如下流程操作:
- 新建一個屬於自己的物件;
- 透過新建的物件來與別人的物件互動;
- 建立新自定義型別繼承本來想要修改的型別,可以給自定義型別新增新方法。
- 不宣告全域性變數
與尊重物件所有權密切相關的是儘可能不宣告全域性變數和函式。同樣,這也關係到建立一致和可維護的指令碼執行環境。最多可以建立一個全域性變數,作為其他物件和函式的名稱空間。
這就相當於我們建立一個屬於自己的名稱空間,所有需要使用到的變數都掛載在這個名稱空間上,這樣無論我們怎麼修改,都不會影響到其他的變數,並且不會存在變數相互汙染。
雖然名稱空間需要多寫一點程式碼,但從可維護性角度看,這個代價還是非常值得的。名稱空間可以
確保程式碼與頁面上的其他程式碼互不干擾。
- 不要在邏輯判斷中比較 null
JavaScript 不會自動做任何型別檢查,因此就需要開發者擔起這個責任。很多 JavaScript 程式碼不會做型別檢查。最常見的型別檢查是看值是不是 null。
我們在判斷或者比較時,最好直接判斷確定的型別,比如是否是陣列、是否存在物件上的某個值。
如果你的應用程式中有用到比較 null 的程式碼,可以嘗試如下方式替換它:
- 如果值應該是引用型別,則使用 instanceof 運算子檢查其建構函式。
- 如果值應該是原始型別,則使用 typeof 檢查其型別。
- 如果希望值是有特定方法名的物件,則使用 typeof 運算子確保物件上存在給定名字的方法。
- 使用常量
對於某些多個地方使用到,並且可能存在修改的資料,我們應該把它儲存為常量。這樣我們就能統一管理,並且需要變更時只用更改一處,這保證了我們修改資料是不會引發錯誤。
以下是一些能儲存為常量的資料:
-
以下是一些程式設計最佳實踐,旨在提高程式碼的可維護性和適應性:
-
重複使用的值:應將程式碼中多次出現的任何值定義為常量。這有助於避免因值在一個地方被修改而在另一個地方未被更新而導致的錯誤。這也適用於CSS中反覆出現的類名。
-
使用者介面文字:所有向使用者顯示的文字都應集中管理,以便於支援多語言環境。
-
URL統一管理:鑑於Web應用中資源路徑(URL)可能發生變動,建議將所有URL集中在一處進行管理,便於後續的修改和維護。
-
潛在的變動值:在程式碼中引入任何字面值時,應考慮其未來的變動可能性。如果存在變動的可能,最好將其提煉為常量。
這些實踐是企業級 JavaScript 開發中的常見做法,不僅可以使程式碼更加易於管理,還能防止因資料變化帶來的潛在問題。
寫在後面
在本文中,我們探討了確保程式碼可維護性的幾個關鍵策略。程式碼的可維護性不僅關係到專案的長期成功,也直接影響開發團隊的效率和工作滿意度。
總的來說,投資於提高程式碼的可維護性將為企業帶來長遠的利益,包括降低成本、提高效率和增強產品質量。維護良好的程式碼庫是任何成功軟體專案的基石。
可維護性也是保證我們後續開發效率的一個重要因素,我們能夠更加規範地去迭代和開發,減少新人員介入專案是的理解成本。
最後:喜歡本文的話請留下一個您的免費點贊和收藏吧!
感恩~ Peace and love~