更快的代码If / then

时间:2017-09-12 14:04:18

标签: performance delphi if-statement

我找到了一些像

这样的代码
import re
s = "..X..Y..Y.X.." 
if len(re.findall("X", s)) == len(re.findall("Y", s)):
    pass

代码中的if / then超过50个语句 每次发送者都与表单上的组件匹配。 然后是改变代码的逻辑,如:

procedure UpdateComp(Sender: TObject)
begin
  if Sender = edtA then
  begin
    ...  //to something
  end;
  if Sender = edtB then
  begin
    ...  //to something
  end;
  if Sender = edtC then
  begin
    ...  //to something
  end;
  ...
end;

或者我改变这种方式是不正确的?

我在途中找到的一段代码:

procedure UpdateComp(Sender: TObject)
begin
  if Sender = edtA then
  begin
    ...  //to something
  end
  else if Sender = edtB then
  begin
    ...  //to something
  end
  else if Sender = edtC then
  begin
    ...  //to something
  end;
  ...
end;

因此我想用if / else作为第一次更改来改变代码

2 个答案:

答案 0 :(得分:4)

您的提案是正确的,并且可以为您节省一些CPU指令执行(如果您非常关心性能)。但只有所有表达都是为了平等。这是因为第一个代码块总是评估所有表达式(无论是否有一个计算结果为true),而你提出的代码却没有。

但是在这种情况下,我会检查代码,并尝试找到与您合作的控件有共同点,并相应地对它们进行分组(如果可能的话)。

答案 1 :(得分:2)

可能的替代方法是将不同编辑字段的Tag属性设置为不同的数字,并使用case (Sender as TEdit).Tag of - 子句。这内部将使用跳转表,避免必须处理一系列if语句。

另一种可能性,如果你觉得,是艰难的方式并实现你自己的继承自TEdit(或TCustomEdit)的类,并为这个确切的情况添加一个额外的事件句柄现在请致电UpdateComp