我知道let
比var
更好,但我不确定以下哪一项是性能基础上的良好做法。
var edgeValue: Int
var edgeChars: String
var edgeColor: String
if directionUp {
edgeValue = -5
edgeChars = "x"
edgeColor = "red"
} else {
edgeValue = 5
edgeChars = "y"
edgeColor = "green"
}
或
let edgeValue = directionUp ? -5 : 5
let edgeChars = directionUp ? "x" : "y"
let edgeColor = directionUp ? "red" : "green"
最后一个更具可读性,它们是常量,但是如果我将来必须将directionUp
更改为anotherCondition
,那么我需要在所有行中更改它,并且它必须在每行运行时计算或检查directioinUp
。
我正在寻找这两个性能方面的最佳代码。
提前感谢您的所有答案和建议。
这两种解决方案最终都被编译为汇编代码,该汇编代码有多个步骤:
- 内存分配
- 复制这些值 L1、L2、...在中央处理器中
- 比较 ...
汇编代码如下所示:
MOV AX,5h
MOV BX,5h
SUB AX,BX
JZ EQUALS
JNZ NOTEQUALS
EQUALS:
MOV CL,'Y'
JMP PRINT
NOTEQUALS:
MOV CL,'N'
PRINT:
MOV AH,2
MOV DL,CL
INT 21H
RET
此解决方案看起来很优雅,但执行步骤比其他解决方案更多, 以directionUp
三次为例进行比较。
let edgeValue = directionUp ? -5 : 5
let edgeChars = directionUp ? "x" : "y"
let edgeColor = directionUp ? "red" : "green"
Makelet
, notvar
:
let edgeValue: Int
let edgeChars: String
let edgeColor: String
if directionUp {
edgeValue = -5
edgeChars = "x"
edgeColor = "red"
} else {
edgeValue = 5
edgeChars = "y"
edgeColor = "green"
}
只需在第一个代码片段中将var
替换为let
即可。您只初始化一次edgeValue
、edgeChars
和edgeColor
。
有三个性能标准:
a( 计算速度
b( 使用内存量更少
c(任何开发人员都可以更快地阅读和理解代码(因此需要商业代码,大团队必须写下大项目并相互重新检查(
为了获得最快的性能,它是:
let edgeValue: Int
let edgeChars: String
let edgeColor: String
(edgeValue, edgeChars, edgeColor) = directionUp ?
(-5, "x", "red") :
(5, "5", "green")
为了更快地使用代码(阅读和理解它(最好将所有这些数据连接到一个结构中:
struct Edge{
let value: Int
let chars: String
let color: String
}
let edge = directionUp ?
Edge(value: -5, chars: "x", color: "red") :
Edge(value: 5, chars: "5", color: "green")
对于每次调用任何属性,此结构会占用额外的 4 字节内存和很少的处理器性能,但使用几个类似的结构比尝试记住每个类中的所有变量更舒服。
无论如何 - 如果此值不会更改 - 请使用 let,用于清除您的代码并禁止更改此值