所以我想要一个不可变的Vector类。为此,我需要为x和y坐标以及私有setter设置一个公共getter,以便我可以在构造函数中实际初始化这些值。
我有一些选择可供我使用,所以我想知道哪一种符合惯例。
我可以这样做:
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中以大写字母开头,所以这也许是一个坏主意。
处理此问题的首选方法是什么?
答案 0 :(得分:11)
迄今为止的普遍共识是使用下划线。私有变量不会在课程外的自动完成中显示 - 因此,在_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样式命名约定,因为它会根据您是否正在调用“来回避免切换惯例”我们的功能“或”他们所做的功能“。
仅在案例中避免差异也是Steve McConnell在Code Complete中的建议 - 这是针对x
和X
的另一个坏点,以及您在问题中提到的命名约定点。