2014-02-10 63 views
11

所以我想擁有一個不可變的Vector類。爲此,我需要爲x和y座標以及一個私有setter設置一個公共getter,以便我可以在構造函數中實際初始化這些值。Typescript private setter public getter convention

我有幾個選擇在我的處置,所以我想知道哪一個是每個公約。

我能做到這一點是這樣的:

class Vector { 
    constructor(private _x: number, private _y: number) { } 
    public get x() { 
     return this._x; 
    } 

    public get y() { 
     return this._y; 
    } 
} 

但我不知道是否使用下劃線是做一個普通的事情。這可能是一個問題,因爲該名稱將在智能感知中可見。

第二個選項可能是

class Vector { 
    constructor(private x: number, private y: number) { } 
    public get X() { 
     return this.x; 
    } 

    public get Y() { 
     return this.y; 
    } 
} 

據我所知,只有上課的時間與JS首都所以這也可能是一個壞主意。

處理這個問題的首選方法是什麼?

回答

10

到目前爲止,普遍的一致意見是使用下劃線。私人變量不會在班級以外的自動完成中顯示 - 因此您不會在Vector的實例上看到_x_y自動完成。唯一你會看到它們的地方是在調用構造函數時,如果真的冒犯了,你可以避免自動映射(儘管我寧願有自動映射)。

class Vector { 
    private _x: number; 
    private _y: number; 

    constructor(x: number, y: number) { 
     this._x = x; 
     this._y = y; 
    } 

    public get x() { 
     return this._x; 
    } 

    public get y() { 
     return this._y; 
    } 
} 

var vector = new Vector(1, 2); 

有沒有這方面的正式標準 - 但它是最好遵循JavaScript的樣式命名約定,如果有任何機會,任何與外部代碼進行交互,因爲它會避免切換公約來回具體取決於您的正在調用「我們製造的功能」或「他們製造的功能」。只有在情況下

避免分歧也是代碼由史蒂夫·麥康奈爾完整的建議 - 這是對xX另一個壞點與你在問題中提到的命名約定點一起。

+0

可能希望將'number'類型添加到'x'和'y'屬性聲明中。 – WiredPrairie

+0

沒有必要 - 類型推斷的真棒力量知道他們已經是數字了。 – Fenton

+0

嗯..我也這麼認爲,但遊樂場沒有正確推斷它們(我認爲編譯器也沒有)。 – WiredPrairie