algorithm - 我可以在函数中设置状态吗?

标签 algorithm delphi optimization

我有这个代码:

procedure EstablishCommunication;
var
    State         : TStates;
    Attempts      : Byte;      
    procedure IncAttempts;
    begin
        Inc(Attempts);
    end;
begin
    State    := stReadDeviceID;
    Attempts := 0;

    while True do
    begin
        if Attempts >= MAX_ATTEMPTS then
        begin
            State := stError;
        end;
        case State of
            stReadDeviceID:
            begin
                // some code
                IncAttempts;
            end;
            stError:
            begin
                // Error code
            end;
        ...
        ...
        ...

我想把将状态设置为 stError 的代码放在过程 IncAttempts 中,结果:

procedure EstablishCommunication;
var
    State         : TStates;
    Attempts      : Byte;      
    procedure IncAttempts;
    begin
        Inc(Attempts);

        if Attempts >= MAX_ATTEMPTS then
        begin
            State := stError;
        end;
    end;
begin
    State    := stReadDeviceID;
    Attempts := 0;

    while True do
    begin            
        case State of
            stReadDeviceID:
            begin
                // some code
                IncAttempts;
            end;
            stError:
            begin
                // Error code
            end;
        ...
        ...
        ...

那么,我可以将代码移到 IncAttempts 吗?

这是代码味道吗?

如果是,你能给我一个更好的方法吗?

最佳答案

我认为这是完美的有效代码。在另一个方法中声明一个方法时,我会问自己以下问题。大多数时候我不这样做,但有时它会产生更好的代码。

  • 内部功能是否需要像在子类中那样进行更改?
  • 我可以在不调用内部方法的情况下重写外部方法并且没问题吗?
  • 内部函数在外部方法之外是否有实际应用?
  • 内部函数是否足够复杂以至于应该在外部方法的范围之外进行单元测试?

如果上述任何情况适用,请不要使用内部方法。

但是,如果您没有上述任何一项,并且它可以删除重复代码和/或简化设计,那么您可以考虑使用内部函数。

关于algorithm - 我可以在函数中设置状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4807959/

相关文章:

c - 创建链表的困难

algorithm - 在 Scala 中处理联合、子集和超集

c++ - 如何将字符串转换为缩写形式?

delphi - 如何保存/加载类型集?

c++ - 英特尔MKL函数在内部调用TerminateProcess()

delphi - TURLEncoding.Base64.Encode 添加换行符?

java - 我如何优化这个java代码?

algorithm - 是斐波那契数列伪多项式的迭代解吗?

c++ - C++11 : how does it optimize? 循环中函数返回值的内存分配

arrays - 最佳引用二维数组?