delphi 检查某些值是否必须替换的最佳方法是什么?

x759pob2  于 2023-01-02  发布在  其他
关注(0)|答案(2)|浏览(163)

我正在Delphi中更新ERP程序中的一些产品价格,我想检查是否应该替换具有较小值或零值的新价格。我用两种方法编写了它(第一种是现有代码,第二种是实现它的替代方法)。代码示例如下:
第1个示例:

if DlgBuff.AsInteger[0, FldReplSmall]=0 then             // Replace Smaller Values: No
begin
  if OldPriceW>PriceW then
    PriceW:=OldPriceW;
  if OldPriceR>PriceR then
    PriceR:=OldPriceR;
end
else if DlgBuff.AsInteger[0, FldReplSmall]=2 then        // Replace smaller non zero values
begin
  if (OldPriceW>PriceW) and (PriceW=0) then
    PriceW:=OldPriceW;
  if (OldPriceR>PriceR) and (PriceR=0) then
    PriceR:=OldPriceR;
end;

第二个例子:

if OldPriceW>PriceW then
  if (DlgBuff.AsInteger[0, FldReplSmall]=0) or ((DlgBuff.AsInteger[0, FldReplSmall]=2) and (PriceW=0)) then
    PriceW:=OldPriceW;
if OldPriceR>PriceR then
  if (DlgBuff.AsInteger[0, FldReplSmall]=0) or ((DlgBuff.AsInteger[0, FldReplSmall]=2) and (PriceR=0)) then
  PriceR:=OldPriceR;

在你看来,写这样的东西的正确方法是什么?正确的意思是更有效的方法。
第一个例子是预先存在的代码,我添加了else块来处理较小的非零值的替换(Replace Smaller Values:没有已经在那里)。
然后我也考虑过用一种更紧凑但第一眼看起来更难理解的方式来写它(也许吧?)你认为什么是更合适的写这样的东西的方式?
我认为第二种方法更好,因为它有更少的IF检查和更少的代码重复,但第一种似乎更清楚和更容易理解的人。

zlwx9yxi

zlwx9yxi1#

不要自己使用一堆if语句来比较哪个数字更大,而是使用System.Math单元中的Max函数。
所以保持更高价格的代码应该是这样的

if DlgBuff.AsInteger[0, FldReplSmall]=0 then             // Replace Smaller Values: No
begin
  PriceW := Max(OldPriceW, PriceW);
  PriceR := Max(OldPriceR, PriceR);
end;

至于只替换零值价格。为什么还要检查旧价格是否大于新价格?如果新价格为零,则唯一价格可以相同(旧价格也为零)或更大。在这两种情况下,您只需将旧价格分配给新价格。

au9on6nz

au9on6nz2#

case DlgBuff.AsInteger[0, FldReplSmall] of
  0: begin
       PriceW:=Greatest(PriceW,OldPriceW);
       PriceR:=Greatest(PriceR,OldPriceR);
     end;
  2: begin
       if (PriceW=0) than PriceW:=Greatest(PriceW,OldPriceW);
       if (PriceR=0) than PriceR:=Greatest(PriceR,OldPriceR);
     end;
  end;

相关问题