编码风格 - 关于使用属性的共识

时间:2017-07-05 16:15:39

标签: typescript

以下是同一类的2个版本。

1)使用公共字段:

export class MyClass {
  public field: string;
}

2)使用getter和setter

export class MyClass {
  private _field: string;

  public get field() {
    return this._field;
  }

  public set field(field: string) {
    this._field = field;
  }
}

与其他语言比较:

如果这是一个java或C#类,那么普遍的共识是公共字段(即代码块1)违反封装法则。最重要的是,在java中,在多线程的情况下字段的行为方式存在一些差异。如果您想直接访问字段,可能需要添加volatile关键字。

所以,在java和C#中,共识是你应该在大多数情况下编写getter / setter。 (即代码块2)

在打字稿中,getter / setter似乎有更多的缺点而不是优势:

但我的印象是,在Typescript中,将字段公开可能更好。它似乎解决了一些问题:

  • 对于外部类,调用字段或getter看起来完全相同(因此,调用getter时没有大括号)。
  • 我上面的示例定义了带下划线前缀的字段,这违反了字段的命名约定。
  • 避免导致递归循环的潜在错误。 get f() { return f; }
  • 显然,重复性较低的样板代码:我的大多数打字稿类几乎都是空的(即角度组件的类)。如果我要明确地定义所有getter / setter,那么可能会使代码量增加三倍。

一些具体问题:

  • Typescript社区对属性的普遍共识是什么?
  • 当所有这些打字稿代码都构建为javascript时,这两段代码实际上只能产生相同的javascript代码吗?

为什么我会问有关风格的问题? - 因为我不会为自己编写代码。我也希望其他人享受我的代码,不要因为我违反简单的编码规则而感到恼火。

0 个答案:

没有答案