![]() |
1
51
全局数据不好。但是,使用静态方法可以避免许多问题。 我将担任 Rich Hickey 在这个问题上这样解释: 要在C语言中构建最可靠的系统,请使用静态方法和类,但不要使用全局数据。例如,如果您将一个数据对象交给一个静态方法,并且该静态方法不访问任何静态数据,那么您可以确信,给定输入数据,函数的输出将始终是相同的。这是Erlang、Lisp、Clojure和其他人的立场 Functional Programming language 使用静态方法可以大大简化多线程编码,因为如果编程正确,一次只有一个线程可以访问给定的数据集。这就是问题的症结所在。拥有全局数据是不好的,因为它是一种状态,谁知道哪个线程可以随时更改。然而,静态方法允许非常干净的代码,可以以较小的增量进行测试。 我知道这会引起激烈的争论,因为它与C#的OOP思想过程背道而驰,但是我发现我使用的静态方法越多,我的代码就越干净和可靠。 This video 比我能解释的更好,但是展示了不可变数据和静态方法如何产生一些非常线程安全的代码。 让我再澄清一下全球数据的一些问题。恒定(或只读)全局数据并不像可变(读/写)全局数据那么重要。因此,如果有一个全局数据缓存是有意义的,那么就使用全局数据!在某种程度上,每个使用数据库的应用程序都会有这样的功能,因为我们可以说,所有的SQL数据库都是一个保存数据的巨大全局变量。 所以,像我上面所说的那样做一个笼统的陈述可能有点强。相反,假设使用全局数据会带来许多问题,而使用本地数据可以避免这些问题。 一些语言(如Erlang)通过将缓存放在单独的线程中来解决这个问题,该线程处理对该数据的所有请求。这样,您就知道对该数据的所有请求和修改都是原子的,全局缓存不会处于未知状态。 |
![]() |
2
12
|
![]() |
3
6
然而,现实世界比理论更混乱,静力学通常是解决一些开发问题的非常有用的方法。在适当的时候适度地使用它们。 |
![]() |
4
3
除此之外,
|
![]() |
5
3
可变静态 变量 因为他们只是一个全球性的国家。我所知道的关于这个的最好的讨论 is here, under the heading "Why Global Variables Should Be Avoided When Unnecessary" . 静态 有几个缺点,往往使他们不受欢迎-最大的一个是,他们不能使用多态性。 |
![]() |
6
2
这方面没有问题 静态方法 (变量)。如果你宣布 公众的 类中的静态字段,这将是一个真正的全局变量,这将是不好的。 但是让静电场 私有的 |
![]() |
7
2
static关键字不是全局的,它告诉您它在类级别上,这在各种情况下都非常有用。总之,类级的东西是静态的,对象级的东西不是静态的。 |
![]() |
8
2
静态方法用于实现 traits part . 正如DCI的支持者所说,这可以看作是 "higher order form of polymorphism"
另外,静态方法也可以用来实现函数。这就是F#用来实现
modules
. (还有
VB.NET
)函数对函数编程很有用(毫不奇怪)。有时它们只是一些东西的建模方式(比如
|
![]() |
9
1
静态 数据 如果他们是无国籍的话,情况也不会那么糟。 |
![]() |
10
0
不完全是。静态实际上决定了什么时候,什么地方,多久实例化一次,而不是谁有权访问它。 |
![]() |
John V · 是否存在单元测试无法发现的逻辑/流错误类型? 7 年前 |
![]() |
Beefster · 为什么ANSI颜色转义以“m”而不是“]”结尾? 7 年前 |
![]() |
Guillermo Gutiérrez · STR转换是如何工作的? 7 年前 |
![]() |
RudziankoÅ · 合并排序数组算法 7 年前 |
|
user8852560 · 构造函数中的验证和构造函数冲突 7 年前 |
![]() |
jav974 · 订购产品时寻找最佳价格组合的算法 7 年前 |
![]() |
hippietrail · 确定浮点数中前导零的数量 7 年前 |