在什么情况下声明实例变量?

mtx

我有简单的课程:

class Blah { 

  private PApplet applet; 
  private float value;

  public Blah(PApplet theApplet, theValue) {
    applet = theApplet;
    value = theValue;
  }

  public float getX() {
    return PApplet.map(value, applet.min, applet.max, applet.c1, applet.c2);
  }

}

我现在不知道,是否可以getX()按照说明进行操作?

我不应该xpos为此声明一个变量以及一个setter和getter吗?在这种情况下,如何决定是否应声明实例变量?(其中一个实例变量值取决于另一个实例变量)

使用xpos实例变量,我将拥有:

class BlahBla {
  private PApplet applet;
  private float value;
  private float xpos;

  BlahBla(PApplet theApplet, float theValue) {
    applet = theApplet;
    value = theValue;
    xpos = PApplet.map(theValue, applet.min, applet.max, applet.c1, applet.c2);
  }

  public getX() {
    return xpos; 
  }

  public setX(float theValue) {
    xpos = map(theValue, applet.min, applet.max, applet.c1, applet.c2);
  }

}

xpos作为实例变量的优点

  • 每次getX()调用我都不做映射

xpos作为实例变量的缺点

  • 更多代码
  • 使用setter方法时的困惑

注意事项:

  • 设置员不应该直接将值分配给xpos吗?这里应该允许任何操作(例如映射)吗?

  • xpos应该链接到value-setX()没有参数创建是否有效如果我有xpos变量并且set(float theValue)作为public-这打破了两者之间的联系,xpos并且value由于使用setter允许分配除以外的任何数据value

波希米亚风格

按照您的第一个版本,只有一个吸气剂:没有字段:

  • 更简单的代码
  • 不必担心value对象寿命等发生变化的情况(今天可能不会发生,但有一天可能会发生)
  • 更少的代码
  • 这是过早的优化:

将计算出的属性存储在字段中的唯一原因是“性能”,但是如果您在设计时考虑它,那本身就是一个大错误。仅当您有确凿的证据确实存在性能问题时,才考虑使用字段。同样,如果只为某些对象调用getter,则为所有对象计算它会很浪费。

在任何一种情况下都没有必要,也没有意义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章