1. 程式人生 > >接口和面向接口編程

接口和面向接口編程

bstr mic 代碼重構 xmlhttp print 多態 active 但是 退出

1,抽象類

例如,Duck對象和Chicken對象的類型都隱藏在Animal類型的身後,向上轉型。建立契約,抽象類裏面的abstract方法,各個子命令類繼承或者覆寫。

面向接口編程,接口是個抽象的概念,可以理解為:面向超類型編程,當對象的具體類型被隱藏在超類型的身後,這些對象就可以相互替換使用,而我們的關註點就會從對象類型轉移到對象的行為上。也可以看成面向抽象編程,即針對超類型中的abstract方法編程。

Javscript是一門動態類型語言,類型本身比較模糊,除了number,string,boolean等,其他對象天生被向上轉型成Object類型。動態類型語言中,對象的多態性與生俱來。

因為javascript是動態語言,所以我們在業務代碼中經常插入一些跟業務無關的防禦性代碼。

TypeScript是微軟開發的一種編程語言,是JavaScript的一個超集,與CoffeeScript類似,TypeScript最終會被編譯成Javascript代碼執行,通過TypeScript我們可以使用靜態語言的方式來編寫JavaScript程序。

代碼重構技巧:

(1)提煉函數

(2)合並重復的條件片段

(3)將條件分支語句提煉成函數,語義化條件後更加容易理解

(4)合理使用循環,舉例如下:

var createXHR = function(){
var xhr;
try{
     xhr 
= new ActiveXObject( ‘MSXML2.XMLHttp.6.0‘ ); }catch(e){ try{ xhr = new ActiveXObject( ‘MSXML2.XMLHttp.3.0‘ ); }catch(e){ xhr = new ActiveXObject( ‘MSXML2.XMLHttp‘ ); } } return xhr; }; var xhr = createXHR();

上面是創建XHR對象的代碼,可以使用循環更加簡練:

var createXHR = function(){
var versions= [ ‘MSXML2.XMLHttp.6.0ddd‘, ‘MSXML2.XMLHttp.3.0‘, ‘MSXML2.XMLHttp‘ ];
for ( var i = 0, version; version = versions[ i++ ]; ){ try{ return new ActiveXObject( version ); }catch(e){ } } }; var xhr = createXHR();

(5)提前讓函數退出,代替嵌套條件分支

每個函數只能有一個入口和一個出口,關於函數只有一個出口,嵌套的條件分支往往深信這個,但是實際上,如果對函數的剩余部分不感興趣,就應該提前退出。

(6)對於過長的參數列表,可以用對象參數代替,不用再關心參數的數量和順序,只要保證參數對應的key值即可。

(7)盡量減少參數數量

(8)少用三目運算符

程序員喜歡大規模使用三目運算符來代替傳統的if,else,理由是性能高,代碼量少。但是有時候會得不償失,如果條件復雜還是乖乖使用if,else吧

(9)合理使用鏈式調用

JavaScript中實現鏈式調用很簡單,讓方法調用結束後返回對象本身即可。但是鏈式調用的調試和維護比較困難。

(10)分解大類型

(12)用return退出多重循環

var print = function( i ){
console.log( i );
};
var func = function(){
 for ( var i = 0; i < 10; i++ ){
   for ( var j = 0; j < 10; j++ ){
     if ( i * j >30 ){
       return print( i );
     }
     }
   }
 };
func();

針對return後面要執行的代碼,可以提煉成一個單獨的函數,然後執行。

【完】

接口和面向接口編程