什么执行起来更快 - expr 或 if

What is faster to execute - expr or if

我正在研究在包含 if 和 else 块的单个命令中使用三元运算符优化我现有代码的执行的可能性。

三元运算符方法是否比传统的 if / else 方法更快,例如执行以下内容的速度更快:

第一个:

expr {[info exists arr($var)]? [return $_timeouts($var)] : [puts "No key $var has been set"]}

第二个:

if {[info exists arr($var)]} { 
    [return $_timeouts($var)]
} else {
    puts "No key $var has been set"
}

请注意,三元运算符方法 (First) 中的整个 expr 都包含在单个 {} 块中,我希望这比第二种方法执行起来更快。

谢谢

您可以使用内置的 time 命令来测试您的问题。

我将 'puts' 更改为不同的 'return' 语句,以便可以直接比较数组中存在的变量的速度与数组中不存在的变量的速度.

variable arr

proc test1 { var } {
  variable arr

  expr {[info exists arr($var)] ? [return $arr($var)] : [return -1]}
}

proc test2 { var } {
  variable arr

  if { [info exists arr($var)] } {
    return $arr($var)
  } else {
    return -1
  }
}

proc init { } {
  variable arr

  # fill arr with stuff...
  for {set i 0} {$i < 10000} {incr i} {
    set arr($i) $i
  }
}

init
puts [time {test1 9000} 10000]
puts [time {test1 15000} 10000]
puts [time {test2 9000} 10000]
puts [time {test2 15000} 10000]

我机器上的结果:

bll-tecra:bll$ tclsh t.tcl
1.3121 microseconds per iteration
1.0267 microseconds per iteration
1.1399 microseconds per iteration
0.9029 microseconds per iteration

所以使用 expr 有点慢。在这种情况下,更具可读性的代码绝对是赢家。

速度差异很小。如果这一点小差异影响了您的程序,我还建议使用字典而不是数组来尝试这段代码并检查速度差异。