我已经读了几篇关于不变性的文章,但仍然没有很好地理解这个概念。
我最近在这里做了一个提到不变性的帖子,但由于这本身就是一个主题,我现在正在制作一个专门的帖子。
我在过去的帖子中提到过,我认为不变性是将对象设为只读并使其具有低可见性的过程。另一位成员表示,这与此没有任何关系。This page (series的一部分)使用了一个不可变的类/结构的例子,它使用只读和其他概念来锁定它。
在本例中,状态的定义到底是什么?状态是一个我还没有真正掌握的概念。
从设计指南的角度来看,不可变的类必须是不接受用户输入并且真正只返回值的类。
我的理解是,任何只返回信息的对象都应该是不可变的和“锁定的”,对吧?因此,如果我想用那个方法在专用类中返回当前时间,我应该使用引用类型,因为这将是该类型的引用,因此我受益于不变性。
发布于 2009-03-07 23:23:00
问得好。
多线程。如果所有类型都是不可变的,那么竞争条件就不存在,您可以安全地在代码中抛出任意多个线程。
显然,如果没有可变性,你就不能完成那么多工作,从而节省了复杂的计算,所以你通常需要一些可变性来创建功能性业务软件。然而,值得注意的是,不变性应该存在于何处,例如任何事务性。
查找函数式编程和纯洁性的概念,以获得更多关于哲学的信息。您在调用堆栈上存储的(传递给方法的参数)越多,而不是通过引用(如集合或静态可用对象)使它们可用,您的程序就越纯粹,就越不容易出现竞争条件。如今,随着多核的增多,这个话题变得更加重要。
此外,不可变性减少了程序中的可能性,从而减少了潜在的复杂性和潜在的bug。
https://stackoverflow.com/questions/622664
复制相似问题