草庐IT

Immutability

全部标签

c# - API设计中如何避免 "too many parameters"问题?

我有这个API函数:publicResultEnumDoSomeAction(stringa,stringb,DateTimec,OtherEnumd,stringe,stringf,outGuidcode)我不喜欢。因为参数顺序变得不必要地重要。添加新字段变得更加困难。更难看出传递的是什么。将方法重构为更小的部分更加困难,因为它会产生另一个在子函数中传递所有参数的开销。代码更难阅读。我想到了一个最明显的想法:有一个封装数据的对象并传递它,而不是一个一个地传递每个参数。这是我想出的:publicclassDoSomeActionParameters{publicstringA;publ

c# - API设计中如何避免 "too many parameters"问题?

我有这个API函数:publicResultEnumDoSomeAction(stringa,stringb,DateTimec,OtherEnumd,stringe,stringf,outGuidcode)我不喜欢。因为参数顺序变得不必要地重要。添加新字段变得更加困难。更难看出传递的是什么。将方法重构为更小的部分更加困难,因为它会产生另一个在子函数中传递所有参数的开销。代码更难阅读。我想到了一个最明显的想法:有一个封装数据的对象并传递它,而不是一个一个地传递每个参数。这是我想出的:publicclassDoSomeActionParameters{publicstringA;publ

c# - 为什么可变结构是 “evil” ?

在此处关于SO的讨论之后,我已经多次阅读可变结构是“邪恶”的评论(就像在对question的回答中一样)。C#中的可变性和结构的实际问题是什么? 最佳答案 结构是值类型,这意味着它们在传递时被复制。因此,如果您更改一个副本,您只会更改该副本,而不是原始副本,也不会更改可能存在的任何其他副本。如果您的结构是不可变的,那么通过值传递产生的所有自动副本都将相同。如果你想改变它,你必须有意识地通过使用修改后的数据创建结构的新实例来做到这一点。(不是副本) 关于c#-为什么可变结构是“evil”?

c# - 为什么可变结构是 “evil” ?

在此处关于SO的讨论之后,我已经多次阅读可变结构是“邪恶”的评论(就像在对question的回答中一样)。C#中的可变性和结构的实际问题是什么? 最佳答案 结构是值类型,这意味着它们在传递时被复制。因此,如果您更改一个副本,您只会更改该副本,而不是原始副本,也不会更改可能存在的任何其他副本。如果您的结构是不可变的,那么通过值传递产生的所有自动副本都将相同。如果你想改变它,你必须有意识地通过使用修改后的数据创建结构的新实例来做到这一点。(不是副本) 关于c#-为什么可变结构是“evil”?

javascript - 为什么我需要卡住 JavaScript 中的对象?

我不清楚何时有人需要在JavaScript中使用Object.freeze。MDN和MSDN在有用的时候不会给出现实生活中的例子。我知道在运行时尝试更改此类对象意味着崩溃。问题是,我什么时候会感谢这次崩溃?对我来说,不变性是一种设计时间约束,应该由类型检查器来保证。那么,在动态类型语言中发生运行时崩溃除了晚检测违规总比不检测好之外还有什么意义吗? 最佳答案 Object.freeze函数执行以下操作:使对象不可扩展,因此不能向其添加新属性。将对象的所有属性的可配置属性设置为false。当-configurable为false时,pr

javascript - 为什么我需要卡住 JavaScript 中的对象?

我不清楚何时有人需要在JavaScript中使用Object.freeze。MDN和MSDN在有用的时候不会给出现实生活中的例子。我知道在运行时尝试更改此类对象意味着崩溃。问题是,我什么时候会感谢这次崩溃?对我来说,不变性是一种设计时间约束,应该由类型检查器来保证。那么,在动态类型语言中发生运行时崩溃除了晚检测违规总比不检测好之外还有什么意义吗? 最佳答案 Object.freeze函数执行以下操作:使对象不可扩展,因此不能向其添加新属性。将对象的所有属性的可配置属性设置为false。当-configurable为false时,pr

javascript - Redux 不只是美化了全局状态吗?

所以我一周前开始学习React,我不可避免地遇到了状态问题以及组件应该如何与应用程序的其余部分进行通信。我四处搜索了一下,Redux似乎是这个月的热门话题。我通读了所有文档,我认为这实际上是一个非常革命性的想法。以下是我对此的看法:状态通常被认为是非常邪恶的,并且是编程中大量错误的来源。与其将它分散在你的应用程序中,Redux说为什么不把它全部集中在一个你必须发出Action来改变的全局状态树中?听起来不错。所有的程序都需要状态,所以让我们把它放在一个不纯的空间里,只从那里修改它,这样bug就很容易被追踪到。然后我们还可以声明性地将各个状态片段绑定(bind)到React组件并让它们自

javascript - Redux 不只是美化了全局状态吗?

所以我一周前开始学习React,我不可避免地遇到了状态问题以及组件应该如何与应用程序的其余部分进行通信。我四处搜索了一下,Redux似乎是这个月的热门话题。我通读了所有文档,我认为这实际上是一个非常革命性的想法。以下是我对此的看法:状态通常被认为是非常邪恶的,并且是编程中大量错误的来源。与其将它分散在你的应用程序中,Redux说为什么不把它全部集中在一个你必须发出Action来改变的全局状态树中?听起来不错。所有的程序都需要状态,所以让我们把它放在一个不纯的空间里,只从那里修改它,这样bug就很容易被追踪到。然后我们还可以声明性地将各个状态片段绑定(bind)到React组件并让它们自

javascript - 插入状态数组的正确方法

我似乎在将数据插入状态数组时遇到了问题。我正在尝试以这种方式实现它:this.setState({myArray:this.state.myArray.push('newvalue')})但我认为这是不正确的方式并且会导致可变性问题? 最佳答案 使用es6可以这样做:this.setState({myArray:[...this.state.myArray,'newvalue']})//simplevaluethis.setState({myArray:[...this.state.myArray,...[1,2,3]]})//an

javascript - 插入状态数组的正确方法

我似乎在将数据插入状态数组时遇到了问题。我正在尝试以这种方式实现它:this.setState({myArray:this.state.myArray.push('newvalue')})但我认为这是不正确的方式并且会导致可变性问题? 最佳答案 使用es6可以这样做:this.setState({myArray:[...this.state.myArray,'newvalue']})//simplevaluethis.setState({myArray:[...this.state.myArray,...[1,2,3]]})//an