变量只赋值一次
一句话总结:尽量,变量,结构体只赋值一次,指针只指向一个地址,对象的属性值只赋值一次。
如果需要改变,给它一个新的名字。
简介
叫做变量却要尽量不要改变,真的很神秘。
如果变量都是只赋值一次的,那么数据的流向就很清晰了,它的开始和结束可以很容易的被掌握,我们对于变量的作用,逻辑的全部流程也会更容易掌握。
利于分解逻辑。重新命名了,数据先后对应的作用域自然也会清晰,逻辑也会自然分段,易于下一步的抽象。
然而很多场景是必然要改变的,比如循环。这些场景也别想太多了,该如何组织就如何组织。
例子
举个 Go 中内置的函数:append,将切片本身,多个元素或者另一个切片附加到这个切片后,并返回新的切片。
经常这样使用:
s := []int{1, 2, 3}
s = append(s, 4, 5, 6)
这样是没问题的。不过我认为这样更好:
s := []int{1, 2, 3}
s1 := append(s, 4, 5, 6)
记得要取有实际意义的变量名。s 作为旧切片,任务已经完成,可以回收了。
另一个例子:一小段 if 逻辑来确定 s 最终的值,代码中经常需要处理这种情况。
s:=1
if a==2{
s=3
}else if a==4{
s=5
}
比起上面,我更倾向于下面的方式:
var s int
if a == 2 {
s = 3
} else if a == 4 {
s = 5
}else{
s = 1
}
用声明,然后只赋值一次的方式来搭建这个逻辑,能减少我们的心智负担。
总结
以这种方式来组织逻辑会带来问题:需要开辟新的内存空间来存放新的变量,编译器可能不会帮我们优化,此时在性能上是负优化了,在性能敏感的场景下不应该这样。
然而其他场景,特别是需要面临更多潜在的变更的情况下,越是复杂的逻辑,保持数据流向的简洁和清晰,不要引入过多的分岔,更能降低复杂度和编码者的心智负担,让复杂的逻辑不会进一步膨胀,保持在能被人类理解的范围内。
文档信息
- 本文作者:nyaaar
- 本文链接:https://nyaaarlathotep.github.io/2024/07/17/%E5%AE%9E%E8%B7%B54/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)