实践中的总结四:变量只赋值一次

2024/07/17 总结 实践 共 781 字,约 3 分钟

变量只赋值一次

一句话总结:尽量,变量,结构体只赋值一次,指针只指向一个地址,对象的属性值只赋值一次。

如果需要改变,给它一个新的名字。

简介

叫做变量却要尽量不要改变,真的很神秘。

如果变量都是只赋值一次的,那么数据的流向就很清晰了,它的开始和结束可以很容易的被掌握,我们对于变量的作用,逻辑的全部流程也会更容易掌握。

利于分解逻辑。重新命名了,数据先后对应的作用域自然也会清晰,逻辑也会自然分段,易于下一步的抽象。

然而很多场景是必然要改变的,比如循环。这些场景也别想太多了,该如何组织就如何组织。

例子

举个 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
	}

用声明,然后只赋值一次的方式来搭建这个逻辑,能减少我们的心智负担。

总结

以这种方式来组织逻辑会带来问题:需要开辟新的内存空间来存放新的变量,编译器可能不会帮我们优化,此时在性能上是负优化了,在性能敏感的场景下不应该这样。

然而其他场景,特别是需要面临更多潜在的变更的情况下,越是复杂的逻辑,保持数据流向的简洁和清晰,不要引入过多的分岔,更能降低复杂度和编码者的心智负担,让复杂的逻辑不会进一步膨胀,保持在能被人类理解的范围内。

文档信息

Search

    Table of Contents