Questions tagged «globals»

17
为什么全球国家如此邪恶?
在我们开始之前,让我说我非常了解抽象和依赖注入的概念。我不需要在这里睁开眼睛。 好吧,我们大多数人在没有真正理解的情况下说了太多次了,“不要使用全局变量”,或者“ Singletons之所以邪恶是因为它们是全局的”。但真正是如此不好的不祥的全局状态? 假设我需要为应用程序进行全局配置,例如系统文件夹路径或应用程序范围的数据库凭据。 在那种情况下,除了在某种全局空间中提供这些设置之外,我看不到任何好的解决方案,这对于整个应用程序都是通用的。 我知道这是不好的滥用,但是全球空间真的THAT邪?如果是的话,那里有什么好的替代方案?

22
全局变量与数据库有何不同?
我只是碰到了这个老问题,问全局状态有什么弊端,最受好评的答案断言您不能信任任何与全局变量一起使用的代码,因为其他地方可能会出现其他代码并对其进行修改值,然后您将不知道代码的行为,因为数据不同! 但是,当我看到这一点时,我不禁会认为这是一个很弱的解释,因为与使用数据库中存储的数据有何不同? 当您的程序正在使用来自数据库的数据时,您不必担心系统中的其他代码是否正在更改它,或者即使是完全不同的程序正在更改它。您不在乎数据是什么。这就是重点。重要的是您的代码可以正确处理它遇到的数据。(显然,我正在解决这里经常遇到的棘手的缓存问题,但是暂时让我们忽略它。) 但是,如果您正在使用的数据来自您的代码无法控制的外部来源,例如数据库(或用户输入,网络套接字或文件等),则没有任何问题这样一来,那么代码本身内的全局数据(程序对它具有更大程度的控制)又如何呢?当它显然远比没有人认为是问题的完全正常的东西坏得多时,这又是一件坏事呢?
250 state  globals 

10
传递参数的(反)模式是否有名称,将仅在调用链的多个级别使用?
我试图在某些旧代码中找到使用全局变量的替代方法。但是这个问题与技术选择无关,我主要关注的是术语。 显而易见的解决方案是将参数传递给函数,而不是使用全局变量。在此传统代码库中,这意味着我必须更改长调用链中最终将使用该值的点与首先接收该参数的函数之间的所有函数。 higherlevel(newParam)->level1(newParam)->level2(newParam)->level3(newParam) newParam在我的示例中,where 以前是全局变量,但可能是以前的硬编码值。关键是,现在newParam的值是从获得的,higherlevel()并且必须一直“移动”到level3()。 我在想,如果有一个姓名(或名称)的这种情况下,你需要一个参数添加到许多功能只是“传”未经修改的值/模式。 希望使用正确的术语将使我能够找到有关重新设计解决方案的更多资源,并向同事描述这种情况。

15
干净的代码:很少参数的函数[关闭]
我读过罗伯特·C·马丁(Robert C. Martin)的“ 清洁代码”的第一章,在我看来,这很不错,但是我怀疑,在某种程度上,有人提到函数应该具有尽可能少的参数是很有意义的(认知上)甚至可能暗示3个或更多参数对于一个函数来说太过昂贵了(我发现它非常夸张和理想化),所以我开始怀疑... 使用全局变量和在函数上传递许多参数的实践都是不好的编程习惯,但是使用全局变量可以大大减少函数中参数的数量。 所以我想听听您对此的看法,使用全局变量减少函数参数的数量是否值得?在什么情况下会呢? 我认为这取决于几个因素: 源代码大小。 平均功能参数数。 功能数量。 使用相同变量的频率。 我认为,如果源代码的大小相对较小(例如少于600行代码),则有许多函数,将相同的变量作为参数传递,并且这些函数具有许多参数,那么使用全局变量将是值得的,但是我想知道... 你有我的看法吗? 您对源代码较大的其他情况有什么看法? PS。我看到了这篇文章,标题非常相似,但是他没有问我想知道什么。

2
参数化方法与全局变量
当我的代码开始增长时,我有一个很简单的问题困扰了我一段时间。 当参数经过嵌套函数调用的长路径时,是否应将其替换为全局变量? 我知道全局环境会使程序的状态不可预测,因为许多函数可以修改共享变量,但是全局空间仍然使事情变得如此容易。 让我解释一下自己: functionA(){ x = something functionB(x) } functionB(x){ functionC(x) } functionC(x){ finallyDoSomethingWithX(x) } finallyDoSomethingWithX(x){ x += 1 //Very dummy example ignoring pass by value, not reference. } 取而代之: globalX; functionA(){ globalX = something functionB() } ... ... ... finallyDoSomethingWithX(){ globalX += 1 } 我觉得第二种方式给程序带来了很大的自由度,因为参数很容易累积,并且有时在必须重用代码时可能会受到很大的限制,但是与此同时,我觉得函数在与变量相关时会失去其模块化在全球环境中,例如当我想finallyDoSomethingWithX使用另一个变量tha 时,它也失去了可重用性globalX。 我认为这是发生在我身上的原因,因为我实际上不是在使用设计模式,因为我使用Javascript进行编程,对我而言,这感觉像是针对中型项目的所有语言的一种脚本交易。 有什么建议吗?模式?如果需要,我可以更具体。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.