如何设置结果值?

时间:2009-06-20 13:45:42

标签: delphi coding-style

function MyFunc: Boolean;
begin
    if eval then
    Result := True
    else
        Result := False;

    /* Note it's a fancy example, I know that in this case I can do: Result := Eval */
end;

OR

function MyFunc: Boolean;
begin
    Result := False;

    if eval then
        Result := True;

/* good by else statement */

end;

7 个答案:

答案 0 :(得分:8)

这真的取决于方法的复杂性,你应该始终以可读性为目标,这些例子对我来说都很好

function MyFunc: Boolean;
begin
   Result := False;
   if (Something or SomethingElse) and Whatever then
     Result := True;
end;


function MyFunc: Boolean;
begin
  Result := (Something or SomethingElse) and Whatever;
end;


function MyFunc: Boolean;
begin
   Exit((Something or SomethingElse) and Whatever);
end;

function MyFunc: Boolean;
begin
  if (Something or SomethingElse) and Whatever then
     Result := True
  else
     Result := False;
end;

我,personaly,喜欢避免使用其他语句并尽可能少写代码行,所以我会选择示例2,但是示例1也很好,选项3和4的可读性不是很高。

我认为如果你把这4个例子给初学者,第一个是最容易理解的。

答案 1 :(得分:3)

为什么不使用。

function MyFunc: Boolean;
begin
    Result := eval;
/* good by if-else statement */
end;

结果与3种变体中的任何一种相同。表现明智,基本上没有区别。

唯一的区别在于可读性。如果函数真的很简单,为什么还要使用if语句

答案 2 :(得分:1)

实际上并不重要,因为现代编译器知道如何“吃掉”并优化它,因此您将收到几乎相同的指令,可能处于不同的执行顺序。根据我的口味,第二种方式更适合阅读。

答案 3 :(得分:1)

我喜欢避免不必要的任务,所以我倾向于使用

if eval then
begin
  // yada yada
  Result := True
end
else    
  Result := False;

或者,当没有周围的代码时,这个:

Result := eval;

另外要记住的另一件事是,时间关键代码中的分支会对性能产生负面影响。在某些情况下,如果可以与分支防止结合使用,则可以更快地多次更新值。这是一个例子:

for i := 0 to Length(aArray) - 1 do
  if Assigned(aArray[i]) then
    Inc(AssignedCounter);

如果这样编写,这段代码运行得更快:

for i := 0 to Length(aArray) - 1 do
  Inc(AssignedCounter, Ord(Assigned(aArray[i])));

答案 4 :(得分:0)

是真正的答案 - 您只需将结果设置为值:)

请注意,您可以将结果用作函数中的正常变量。

e.g。

function DoSomeStuff: Boolean;
Begin
  Result := (evaulate some conditions);
  if Result then
  begin
   //Do good stuff
  end;
end; 

答案 5 :(得分:0)

当函数有很多时,我使用第二种方式:

 if (...) then
 begin
   [...]
   result := default_value;
   exit
 end;

检查(或错误)条件。我不想在每种情况下重复“result := default_value;”。

答案 6 :(得分:-1)

你也可以这样做 MyFunc:= true; 其含义与 结果:= true;