我找到了一些像
这样的代码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作为第一次更改来改变代码
答案 0 :(得分:4)
您的提案是正确的,并且可以为您节省一些CPU指令执行(如果您非常关心性能)。但只有所有表达都是为了平等。这是因为第一个代码块总是评估所有表达式(无论是否有一个计算结果为true),而你提出的代码却没有。
但是在这种情况下,我会检查代码,并尝试找到与您合作的控件有共同点,并相应地对它们进行分组(如果可能的话)。
答案 1 :(得分:2)
可能的替代方法是将不同编辑字段的Tag
属性设置为不同的数字,并使用case (Sender as TEdit).Tag of
- 子句。这内部将使用跳转表,避免必须处理一系列if语句。
另一种可能性,如果你觉得,是艰难的方式并实现你自己的继承自TEdit(或TCustomEdit)的类,并为这个确切的情况添加一个额外的事件句柄现在请致电UpdateComp
。