什么是更好的选择?

Ged*_*ias 9 delphi coding-style

procedure MyProc(Eval: Boolean);  
begin       
    if not Eval then  
        Exit;  
    /* do stuff */  
    /* do more stuff */
end;
Run Code Online (Sandbox Code Playgroud)

要么

procedure MyProc(Eval: Boolean);  
begin  
   if Eval then  
      begin  
         /* do stuff */  
         /* do more stuff */  
      end;

  /* no Exit needed, but now we got what I think unpleasing code:
  having a indentation level and a begin-end statement */
end;
Run Code Online (Sandbox Code Playgroud)

小智 16

有些情况下,任何一种方法都是合适的.然而,通常,第一个提供更可读的代码和更好的控制流.我对Delphi编程不太熟悉,但在C#中我总是尽可能使用前者.从表面上看,我认为这种方法在Delphi中没有任何不同.

列举一些优点:

  • 无需缩进后续代码.
  • 更容易扩展到多种条件.(只需添加额外的if语句而不是逻辑运算符,这样可以使IMO更清晰.)
  • 您正在"选择退出"该方法而不是选择该方法的想法在美学上更令人愉悦,因为以下代码应该在"正常"情况下执行.

不过,有些情况下第二种选择更合适.特别是,当需要将方法分成子部分时(尽管这通常表示您需要重构).


Dav*_*veR 10

我认为这是一个偏好问题.但是,如果您在执行"实际工作"之前必须执行许多检查,那么第一个表单(IMO)看起来更整洁,并且更容易遵循流程.例如:

procedure MyProc(Eval: Boolean);
begin
    if not Eval then
        Exit;
    if not Eval2 then
        Exit;
    /* do stuff */
    /* do more stuff */ 
end;
Run Code Online (Sandbox Code Playgroud)

VS

procedure MyProc(Eval: Boolean);
begin
    if Eval then
    begin
        if Eval2 then
        begin
            /* do stuff */
            /* do more stuff */
        end;
    end;
end;
Run Code Online (Sandbox Code Playgroud)


小智 1

我可以请求一下,如果您确实使用第二种形式,请不要添加无缘无故的缩进级别。所以代替:

procedure MyProc(Eval: Boolean);  
begin  
   if Eval then  
      begin  
         /* do stuff */  
         /* do more stuff */  
      end;

  /* no Exit needed, but now we got what I think unpleasing code:
  having a indentation level and a begin-end statement */
end;
Run Code Online (Sandbox Code Playgroud)

说:

procedure MyProc(Eval: Boolean);  
begin  
   if Eval then  
   begin  
      /* do stuff */  
      /* do more stuff */  
   end;

  /* no Exit needed, but now we got what I think unpleasing code:
  having a indentation level and a begin-end statement */
end;
Run Code Online (Sandbox Code Playgroud)