国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[JS進階] 編寫可維護性代碼 (1)

Youngdze / 436人閱讀

摘要:如果值是基本類型,則用操作符檢查其類型。總結所有編程語言都需要可維護性良好的代碼,這個很重要,因為大部分開發人員都花費大量時間維護他人的代碼。

  

o(╯□╰)o 這并不是什么史詩巨作,沒有非常深入去挖掘這類問題,只是從平常的JS代碼習慣,參考書籍總結而來,希望對你有幫助的!

今天的web應用大至成千上萬行的javascript代碼,執行各種復雜的過程,這種演化讓我們開發者必須得對可維護性有一定的認識!編寫可維護性代碼很重要,很多情況下我們是以他人的工作成果為基礎,確保代碼的可維護性,以便其他開發人員更好地工作!

1 可維護性代碼的特點

可理解性:其他人可以接手代碼并理解它的意圖,無需原開發人員花太多時間解釋!

直觀性:代碼中的東西一看就能明白,盡管其操作過程復雜。

可適應性:代碼以一種數據上的變化不要求完全重寫方法。

可擴展性:在代碼架構上可對核心功能的擴展。

可調式性:出錯時,代碼可以給你足夠的信息來直接確定問題所在。

2 代碼約定

由于javascript語言的特點,我們可編寫各種編程風格的代碼,從傳統的面向對象式到聲明式到函數式。形成一套良好的javascript代碼書寫約定可大大提高可維護性,這點對初學者來說絕對是沒有很注重的地方。

2.1 可讀性

縮進:在項目中統一代碼縮進,更易于閱讀,一種不錯也很常見的縮進大小為四個空格,當然可以是其他數量。

注釋:其實我們在編寫一些后臺代碼會經常把一個功能,一個業務邏輯,一個函數的代碼注釋起來,但我們卻在編寫javascript卻經常忽略這些習慣。一般而言,在js中有以下這些地方需要注釋:

函數和方法 :描述其目的和參數代表,返回值等。

大段的代碼 :大段代碼通常是一個任務的代碼,應注釋描述任務。

復雜的算法 :不是所有人都會你的算法,你需要把你的算法思路簡單描述下。

Hack :因各瀏覽器的差異,javascripthack用于解決什么問題應該描述清楚。

2.2 變量和函數的命名

變量名應該名詞:如carperson

函數名應以動詞開始:如getName(),返回布爾類型值的函數一般以is開頭,如:isEnable();

只要合乎邏輯,不用擔心變量或者函數名的長度,長度問題可以通過在你發布代碼壓縮的時候得以解決。

2.3 變量類型透明
var car,person; //聲明兩個變量

如上代碼,由于javascript中變量是松散類型的,我們并不知道其中的car和person是什么類型的數據,不夠透明,我們可以通過一下兩種方式緩解這種問題:

初始化變量:通過初始化指定變量類型,但通過這種方式命名的對象無法用于函數聲明中的參數。

var car = null; //car是對象
var person = ""; //person是字符串
var count = -1; //count是整數
var found = false; //found是布爾型

匈牙利標記法:在變量名之前加上一個或多個字符表示數據類型。o - 對象,s - 字符串,i - 整數,f - 浮點數,b - 布爾型

var oCar; //car是對象
var sPerson; //person是字符串
var iCount; //count是整數
var bFound; //found是布爾型

3 松散耦合

記得以前剛入門C#的時候,師兄經常跟我說‘高內聚低耦合’這詞,我也就含糊地點點頭,很多人可能也像我之前一樣,這詞耳熟能詳,但未真正實踐。

只要應用的某個部分過分依賴另一部分,代碼就是耦合過緊,難于維護! 典型的問題:對象直接應用另一個對象,并且修改其中一個的同時需要修改另一個。 在我們web應用中,我們可以通過一下方式解耦我們的代碼:

3.1 解耦HTML/JavaScript

在web應用中,我們希望html專注于展示數據,css專注于樣式,javascript專注于行為交互。但是有一些代碼會將htmljavascript過于緊密地耦合在一起。

直接寫在HTMLjavascript,使用包含內聯代碼的

雖然這樣寫完全正確,但出現javascript錯誤是,我們需要判斷錯誤出現在HTML還是在Javascript中,并且這還存在一個時間差問題,當我按下上面代碼的按鈕時,若此時javascript代碼并未加載完,此時變回引發錯誤。在實踐中,理想的狀況應該是HTMLJavascript應完全分離,使用引入外部文件來加載javascript

相反地,在javascript中也不能包含過多的HTMl

function insertMsg(msg){
    var container = document.getElementById("container");
    container.innerHtml = "

" + msg + "

" }

當你在寫這樣的代碼的時候,我想你應該去找個js模板引擎來了。

對動態生成的HTML,對書寫CSS布局,定位錯誤都比較難把控。

3.2 解耦CSS/Javascript

上面說了,CSSJS都應該各司其職,不能有太大的親密動作,秀恩愛,死得快 囧~~~。
這個問題并不能說完全解耦cssjs,因為在現代web應用中常常需要javascript來更改樣式,但是我們還是盡量使他們分離。

// CSS對JS的緊密耦合
element.style.color = "red";
element.style.backgroundColor= "blue";

這樣的代碼在以后修改樣式的時候需要同時修改CSS和JS,可麻煩了。

//這樣就ok了
element.className = "color"; //color是樣式類

還有一個就是不能在CSS中寫CSS表達式,這應該是都知道的了。

3.3 解耦應用邏輯和事件處理程序

每個web應用程序都有相當多的事件處理程序,監聽著大量不同的事件,然而,很少能有仔細將應用邏輯從事件處理程序中分離的,如下:

function checkValue(e){
   e = e || window.event;
   var target = e.target || e.srcElement;
   if(target.value.length < 5){
      //省略一堆邏輯處理代碼...
   }
}

將上面的代碼重寫為:

   function checkValue(value){
       if(value.length < 5){
         //省略一堆邏輯處理代碼...
       }
   }
   function handleBlur(e){
       e = e || window.event;
       var target = e.target || e.srcElement;
       checkValue(target.value); //調用應用邏輯處理函數
    }

這樣寫有什么好處呢?

當有不同的方式觸發相同的相同過程事件的時候,這時只需調用應用邏輯處理函數即可。

應用邏輯處理函數可以在不添加到事件的情況下多帶帶測試。

4 編程實踐

在企業環境中創建的web應用往往同時由大量人員一同創作。在這種情況下的目標是確保每個人所使用的瀏覽器環境都有一致和不變的規則,因此,我們需要堅持一下的一些編程實踐:

4.1 避免全局變量

在一個js文件中,最多允許有一個全局變量,讓其他對象和函數包含在其中,因為過多的全局變量會消耗大量內存。

//兩個全局變量
var name = "jozo";
function sayName(){
  alert("jozo");
}

上面的代碼有兩個全局變量,變量name和函數sayName(),其實可以創建一個變量包含它們:

//一個全局變量 --推薦
var person = {
    name:"jozo",
    sayName : function(){
        alert(this.name);
    }
}

這樣一個全局變量延伸開來就是‘空間的概念’了,不會與其他功能產生沖突,有助于消除功能作用域之間的混淆。

4.2 避免與null進行比較
function sortArray(values){
    if(values != null){
        values.sort(比較函數);
    }
}

上面代碼中的if語句應該檢測values是否是數組,但如果與null作比較的話,字符串,數字等都會通過,導致函數拋出錯誤。這里是數組,那么我們就應該檢測其是否為數組:

function sortArray(values){
    if(values instanceof Array){
        values.sort(比較函數);
    }
}

所于當我們遇到與null作比較的代碼的時候,我們應該用下面的技術替換:

如果值為引用類型,則用instanceof 操作符檢查其構造函數。

如果值是基本類型,則用typeof操作符檢查其類型。

4.3 使用常量
function validate(value){
    if(!value){
        alert("不存在");
        location.href = "/errors/invalid.php";
    }
}

現在,我想把‘不存在’改為‘該數據不存在!’,把跳轉路徑也改了,我得回到函數中找到對應的代碼去修改,而每次修改邏輯代碼,都有可能引入錯誤的風險。所以我們可以把數據多帶帶定義為常量,與應用邏輯分離:

var Constans = {
    ERRORMSG: "不存在",
    ERRORPAGE:"/errors/invalid.php"
};
function validate(value){
    if(!value){
        alert(Constans.ERRORMSG );
        location.href = Constans.ERRORPAGE ;
    }
}

這樣我們修改靜態文本內容的時候就無需去動邏輯函數了,甚至可以把Constans多帶帶一個文件。那么什么樣的數據需要抽出來做常量呢?

重復值:任何在多處用到的值。

用戶界面字符串:任何用于顯示給用戶提示信息的字符串。

URLs:在WEB項目中,資源路徑可能經常變更。在一個公共的地方存起來,修改起來更容易!

任何可能在以后會改變的值。

5 總結

所有編程語言都需要可維護性良好的代碼,這個很重要,因為大部分開發人員都花費大量時間維護他人的代碼。為了減輕相互的負擔,從今天起我要做個好人,寫好代碼! o(╯□╰)o

ok,寫了一遍,我印象又加深了!以上內容整理自《JavaScript高級程序設計》,覺得不錯點個贊唄。下一篇將整理如何書寫提高性能的JS代碼。謝謝閱讀……

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85564.html

相關文章

  • 前端進階之路: 前端架構設計(1)-代碼核心

    摘要:可能很多人和我一樣首次聽到前端架構這個詞第一反應是前端還有架構這一說呢在后端開發領域系統規劃和可擴展性非常關鍵因此架構師備受重視早在開發工作啟動之前他們就被邀請加入到項目中而且他們會跟客戶討論即將建成的平臺的架構要求使用還什么技術棧內容類型 可能很多人和我一樣, 首次聽到前端架構這個詞, 第一反應是: 前端還有架構這一說呢? 在后端開發領域, 系統規劃和可擴展性非常關鍵, 因此架構師備...

    DevYK 評論0 收藏0
  • 前端進階之路: 前端架構設計(1)-代碼核心

    摘要:可能很多人和我一樣首次聽到前端架構這個詞第一反應是前端還有架構這一說呢在后端開發領域系統規劃和可擴展性非常關鍵因此架構師備受重視早在開發工作啟動之前他們就被邀請加入到項目中而且他們會跟客戶討論即將建成的平臺的架構要求使用還什么技術棧內容類型 可能很多人和我一樣, 首次聽到前端架構這個詞, 第一反應是: 前端還有架構這一說呢? 在后端開發領域, 系統規劃和可擴展性非常關鍵, 因此架構師備...

    baishancloud 評論0 收藏0
  • 前端進階之路: 前端架構設計(1)-代碼核心

    摘要:可能很多人和我一樣首次聽到前端架構這個詞第一反應是前端還有架構這一說呢在后端開發領域系統規劃和可擴展性非常關鍵因此架構師備受重視早在開發工作啟動之前他們就被邀請加入到項目中而且他們會跟客戶討論即將建成的平臺的架構要求使用還什么技術棧內容類型 可能很多人和我一樣, 首次聽到前端架構這個詞, 第一反應是: 前端還有架構這一說呢? 在后端開發領域, 系統規劃和可擴展性非常關鍵, 因此架構師備...

    rockswang 評論0 收藏0

發表評論

0條評論

Youngdze

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<