1. 程式人生 > >不需要註解就能看出程式碼含義的一些方法

不需要註解就能看出程式碼含義的一些方法

1.看第一個例子:

var width = (value - 0.5) * 16;

看這句程式碼你一定不知道這是什麼意思,必須註解才能看懂。我們換種方式看看:

var width = emToPixels(value);

function emToPixels(ems) {
    return (ems - 0.5) * 16;
}

我們把要計算的語句放入了函式當中,看見函式名我們就知道這段程式碼是計算寬度的畫素,而且這個函式能夠複用,在其他地方使用就不需要重新複製黏貼程式碼。
2.看第二個例子

if(!el.offsetWidth || !el.offsetHeight
) { }

如果沒有註解的話,真心不知道這個幾個意思,改進程式碼:

function isVisible(el) {
    return el.offsetWidth && el.offsetHeight;
}

if(!isVisible(el)) {
}

把表示式語句放入了函式當中,看函式名就不目瞭然了。當然還有一個方法,不需要新建個函式:

var isVisible = el.offsetWidth && el.offsetHeight;
if(!isVisible) {
}

3.第三個例子

return a * b + (c / d);

改進的程式碼:

var multiplier = a * b;
var divisor = c / d;
return multiplier + divisor;

4.第四個例子類和介面

class Box {
    setState(state) {
        this.state = state;
    }

    getState() {
        return this.state;
    }
}

雖然類中的函式有名字,但是函式名如果不經過註解進行解釋的話,很難理解這個是要幹嘛的。改進辦法:

class Box {
    open() {
        this
.state = 'open'; } close() { this.state = 'closed'; } isOpen() { return this.state === 'open'; } }

改進後的類,一看就知道要幹什麼,而且this.state也不變。
5.第五個例子

var foo = 1;

blah()
xyz();

bar(foo);
baz(1337);
quux(foo);

你能看出foo使用了多少次嗎?改進:

var foo = 1;
bar(foo);
quux(foo);

blah()
xyz();

baz(1337);

6第六個例子
把相同型別的檔案放在同一個目錄中,如果有個ui相關程式碼,應該把他放在src/ui/中,這樣不混亂,容易查詢
7.如果你有一個特定型別的物件,呼叫它的同名:

var element = getElement(); 
var node = getElement(); //不要突然把它叫做一個節點,這個方式不好

8.有意義的錯誤資訊
它能描述問題是什麼;如果可能,它能包含引起錯誤的任何變數值或者其他的資料;最關鍵的是:錯誤能夠幫助我們找出什麼地方出現了錯誤。
9.不要使用語法技巧

imTricky && doMagic();

這段程式碼雖然簡潔,但是誰能夠看明白它是什麼意思?還是老老實實的這樣寫把:

if(imTricky) {
    doMagic();
}

10.如果在你的程式碼中有個特殊的值,例如數值或者字串,使用常量定義。即使它現在能夠讓人看明白,但是過了一兩個月再回過頭看的話,沒有人知道這個變數放在這裡是幹什麼的。:

const MEANING_OF_LIFE = 42;

11.避免使用布林標誌

myThing.setData({ x: 1 }, true);

你能看出true放在這裡是什麼意思嗎?除非你再進入setData裡面去看。
相反,新增另一個函式或者重新命名函式:

myThing.mergeData({ x: 1 });

馬上明白它要做什麼。

12

var ids = [];
for(var i = 0; i < things.length; i++) {
  ids.push(things[i].id);
}

為了能看懂這個迴圈程式碼,我們需要讀整個迴圈,使用map:

var ids = things.map(function(thing) {
  return thing.id;
});

我們能夠明白要生成一個新的陣列,因為map就是這麼用的