Подтвердить что ты не робот

Typescript общественный прием

Итак, я хочу иметь неизменный класс Vector. Для этого мне нужно иметь публичный getter для координат x и y и частный сеттер, чтобы я мог фактически инициализировать эти значения в конструкторе.

У меня есть несколько вариантов в моем распоряжении, поэтому мне интересно, какой из них соответствует конвенции.

Я мог бы сделать это вот так:

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

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

Но я не знаю, является ли использование подчеркивания обычным делом. Это может быть проблемой, поскольку это имя будет видимым в intellisense.

Второй вариант может быть

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

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

Насколько мне известно, только классы начинаются с капиталов в JS, поэтому это может быть и плохая идея.

Каков предпочтительный способ справиться с этим?

4b9b3361

Ответ 1

Общий консенсус до сих пор заключался в использовании подчеркивания. Частные переменные не отображаются при автозавершении вне класса, поэтому вы не увидите _x или _y в автозавершении экземпляра Vector. Единственное место, где вы их увидите, - это вызов конструктора, и если это действительно оскорбляет вас, вы можете избежать автоматического сопоставления (хотя я бы предпочел авто-сопоставление).

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, если есть какие-либо шансы на взаимодействие с внешним кодом, так как это позволит избежать переключения соглашений взад и вперед в зависимости от того, вы вызываете ли вы "Function We Made" или "Function They Made".

Избегая различий только в случае, это также рекомендация в Code Complete от Steve McConnell, которая является еще одной плохой точкой против x и x вместе с пунктом соглашения об именах, упомянутым в вопросе.