为什么在 Ruby 中使用类变量被认为是“代码味道”?

2024-01-06

根据Reek https://github.com/troessner/reek/blob/master/docs/Class-Variable.md,创建类变量被认为是“代码味道”。这背后的解释是什么?


正如您可以在他们的文档中找到的类变量 https://github.com/troessner/reek/blob/master/docs/Class-Variable.md:

类变量构成全局运行时状态的一部分,因此使系统的一个部分很容易意外或无意地依赖于系统的另一部分。因此,系统更容易出现问题,即在这里更改某些内容会破坏那里的某些内容。特别是,类变量可能会使设置测试变得困难(因为测试的上下文包括所有全局状态)。

本质上,它是全球状态的表现,几乎被普遍认为evil https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil,因为它使测试变得更加困难,并导致类/程序结构更加脆弱。

这个堆栈溢出问题 https://stackoverflow.com/questions/33762366/are-ruby-class-variables-bad可能也值得一读,它显示了类变量的主要问题:如果任何类继承自您的类并修改了类变量,every该变量的实例会发生变化,甚至来自父级!可以理解,这让你很容易搬起石头砸自己的脚,所以最好避免它们,除非你非常小心。

将类变量与类实例变量进行比较也是值得的。这个问题 https://stackoverflow.com/questions/15773552/ruby-class-instance-variable-vs-class-variable有一些很好的例子说明了用法差异,但本质上类变量是shared,而类实例变量是未共享。因此,为了避免不必要的副作用,类实例变量几乎总是您想要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 Ruby 中使用类变量被认为是“代码味道”? 的相关文章

随机推荐