首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >公共变量比使用getter和setter更快吗?

公共变量比使用getter和setter更快吗?
EN

Stack Overflow用户
提问于 2017-05-26 12:59:46
回答 3查看 2.3K关注 0票数 6

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

我还应该创建setter和getter吗?我听说公共变量是很糟糕的做法,但是有很多变量,这是个例外吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-26 13:54:11

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

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

我还应该创建setter和getter吗?

可能没有。良好的OO设计遵循一个名为“告诉,不要问”的指导方针。通常,您应该看到需要这些变量的操作,然后在类中实现这些操作,或者在具有访问权限的类中实现这些操作,或者使用不同的模型(可以考虑访问者模式)。

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

拥有公共变量并不是一种糟糕的做法。当您有不变量时,使用公共变量是错误的做法。

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

两者都是坏的,因为它们是错误,如果您有一个propper的话,这些错误是不存在的。

简而言之,只有在没有不变量的情况下,才能接受公共变量。

考虑因素:

  • 使用公共变量,如果设置变量类型允许的任何值,则在任何时间点(没有不变量)
  • 如果有不变量,请使用私有变量。
  • 使用公共方法定义操作,而不是“访问内部变量”。
  • 当您从客户端代码中查看公共API时,要按照要执行的操作来设计它,而不是根据内部实现中存在的变量来设计它。

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

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

Stack Overflow用户

发布于 2017-05-26 13:06:50

为每个变量创建setter和getter函数会影响性能吗?

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

我还应该创建setter和getter吗?我听说公共变量是很糟糕的做法

公共变量本身并不是一种糟糕的实践,尽管通常您希望将数据封装到一个类中,特别是如果存在应用于它们的计算。

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

票数 8
EN

Stack Overflow用户

发布于 2021-04-13 06:03:42

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44202284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档