Swift 中的 `let` 有什么好处?
What are the benefits of `let` in Swift?
我知道 Swift 鼓励我们程序员每次都使用常量 (let
) 而不是变量 (var
) .
这是一件好事,因为我们向编译器提供了更多有关代码含义的详细信息,并且编译器可以更好地防止我们犯错误(例如更改一些不应该更改的值)。
我的问题是,当我们使用 常量而不是变量 时,编译器是否会应用一些 性能优化 ? (例如,更快的执行时间、更少的占用空间……)。
您问“...当我们使用常量而不是变量时,编译器是否应用了一些性能优化?”
答案是肯定的。
可变集合的组织方式可能与不可变集合不同,以便允许更改它们。可以针对只读操作优化不可变集合。
然后是mutable/immutable对象的使用。当可变对象作为另一个对象的 属性 共享时,编译器可能必须生成复制可变对象的代码,以避免意外的副作用。
不可变对象的比较 (equatable/comparable) 也可以通过可变对象无法实现的方式进行优化。
不过,Sulthan 关于编译器智能的观点很好。编译器通常可以从代码分析中推断出变量永远不会改变,这会使基准测试 let 与 var 的使用变得困难。
现在的正确答案是 "probably not"。
向编译器提供额外的信息总是明智的,但是,编译器已经很聪明了。在许多情况下,即使您使用 var
也可以看出变量实际上是一个常量,因此说 let
不会有任何新信息,也不会提供任何好处。
const
/let
的最大好处是防止编程错误。它在非常特殊的情况下可以带来一些性能优势,但现代编译器并不真的需要程序员告诉他们一个变量只被赋值一次。
我知道 Swift 鼓励我们程序员每次都使用常量 (let
) 而不是变量 (var
) .
这是一件好事,因为我们向编译器提供了更多有关代码含义的详细信息,并且编译器可以更好地防止我们犯错误(例如更改一些不应该更改的值)。
我的问题是,当我们使用 常量而不是变量 时,编译器是否会应用一些 性能优化 ? (例如,更快的执行时间、更少的占用空间……)。
您问“...当我们使用常量而不是变量时,编译器是否应用了一些性能优化?”
答案是肯定的。
可变集合的组织方式可能与不可变集合不同,以便允许更改它们。可以针对只读操作优化不可变集合。
然后是mutable/immutable对象的使用。当可变对象作为另一个对象的 属性 共享时,编译器可能必须生成复制可变对象的代码,以避免意外的副作用。
不可变对象的比较 (equatable/comparable) 也可以通过可变对象无法实现的方式进行优化。
不过,Sulthan 关于编译器智能的观点很好。编译器通常可以从代码分析中推断出变量永远不会改变,这会使基准测试 let 与 var 的使用变得困难。
现在的正确答案是 "probably not"。
向编译器提供额外的信息总是明智的,但是,编译器已经很聪明了。在许多情况下,即使您使用 var
也可以看出变量实际上是一个常量,因此说 let
不会有任何新信息,也不会提供任何好处。
const
/let
的最大好处是防止编程错误。它在非常特殊的情况下可以带来一些性能优势,但现代编译器并不真的需要程序员告诉他们一个变量只被赋值一次。