公共变量是否比使用 getter 和 setter 更快?

Are public variables faster than using getters and setters?

本文关键字:getter setter 更快 变量 是否      更新时间:2023-10-16

我正在为我正在制作的游戏编写一个自定义物理引擎,我的物理对象类有大量变量(距离、速度、加速度、质量、重力、力、脉冲持续时间等)。为每个变量创建二传手和吸气函数会影响性能吗? (在给定时间将至少有 100 个此类实例)

我还应该创建二传手和吸盘手吗?我听说公共变量是非常糟糕的做法,但有很多变量,这可以是一个例外吗?

为每个变量创建一个 setter 和 getter 函数会影响性能吗?(在给定时间将至少有 100 个此类实例)

应该不会。理论上是的,但在实践中,调用额外函数以获取特定值的成本可以忽略不计。它影响性能的唯一方法是,如果您最终一直调用这些方法(例如......每秒 50000 次)。

我还应该创建二传手和吸盘手吗?

应该不会。好的OO设计遵循一个叫做"告诉,不要问"的准则。通常,您应该查看需要这些变量的操作,然后在类中实现这些操作,或者在具有访问权限的类中实现它们,或使用其他模型(想到访问者模式)。

我听说公共变量是非常糟糕的做法,但有很多变量,这可以是一个例外吗?

拥有公共变量并不是坏做法。当你有不变量时,有公共变量是一种不好的做法。

例如,如果您有一个测量对象重量的变量,则需要确保它不能设置为无效值(例如负量或大得离谱的金额)。如果将变量设为公共变量,则必须检查在客户端代码中修改它的任何位置设置的值,或者放弃验证该值。

两者都很糟糕,因为它们是错误,如果你有一个带有验证的 propper setter,它们就不会存在。

简而言之,只有当你没有不变量时,才可以接受公共变量。

考虑:

  • 如果设置变量类型允许的任何值都可以,则在任何时候使用公共变量(您没有不变量)

  • 如果您有不变量,请使用私有变量。

  • 使用公共方法来定义操作,而不是"访问内部变量"。

  • 根据从
  • 客户端代码查看公共 API 时要执行的操作来设计公共 API,而不是根据内部实现中存在的变量

在这种情况下,getter 和 setter 有时(很少)有意义,但并不是因为你在类中有变量。

  • getter 和 setter 是试图在错误的地方解决问题的症状:如果你在类 A 中有一个使用类 B 中的变量的操作 X,那么你可能应该在类 B 中定义操作 X,然后从类 A 调用它。

为每个变量创建一个二传手和getter函数会影响性能吗?

至于简单的getter/setter函数,它们通常可以由编译器内联,因此不会对性能产生影响。

我还应该创建二传手和吸盘手吗?我听说公共变量真的很糟糕的做法

公共变量本身并不是一个不好的做法,尽管通常您希望将数据封装在类中,尤其是在对它们应用了计算的情况下。

仅提供 getter/setter 函数的类是无用的,这些类通常可以简单地替换为具有所有公共变量的struct

简单的公共变量违反了OO设计原则,但getter setter没有,这就是为什么我们需要用户总是getter和setter