在Swift中`let`有什么好处?

Luc*_*tti 12 performance constants swift

我知道Swift确实鼓励我们程序员每次有意义时都使用常量(let)而不是变量(var).

这是一件好事,因为我们正在向编译器提供有关我们的代码意味着什么的更多细节,并且编译器可以更好地防止我们犯错误(例如,更改一些不应更改的值).

我的问题是,当我们使用常量而不是变量时,编译器是否会应用一些性能优化?(例如,执行时间更短,占地面积更小,......).

Dun*_*n C 14

你问"......当我们使用常量而不是变量时,编译器是否会应用一些性能优化?"

答案是肯定的,绝对的.

可变集合的组织方式可以与不可变集合不同,以便允许更改它们.可以针对只读操作优化不可变集合.

然后是使用可变/不可变对象.编译器可能必须生成代码,该代码在将可变对象作为另一个对象的属性共享时复制该可变对象,以避免不期望的副作用.

不可变对象(等同/可比较)的比较也可以以可变对象不能的方式进行优化.

Sulthan关于编译器智能的观点虽然很好.编译器通常可以推断变量永远不会从代码分析中改变,这可以使基准测试变得难以与变量使用相比较.


Sul*_*han 8

现在的正确答案是"可能不是".

向编译器提供附加信息总是明智的,但是,编译器已经非常智能.在许多情况下,即使你使用它,它也可以看到一个变量实际上是一个常量var,所以说let不会是任何新的信息而且它不会带来好处.

const/ 的最大好处let是防止编程错误.它在非常特殊的情况下可以有一些性能优势,但现代编译器并不需要程序员告诉他们变量只分配一次.