决定是否运行一个函数,哪种方式更好?

时间:2009-07-22 22:06:57

标签: coding-style

我从服务器加载了一些数据,但是当UI开始向用户显示时,我无法保证能够拥有这些数据。每一帧都有一个滴答功能。收到新数据时会设置一个标志,所以我知道是时候将它加载到我的数据结构中了。以下哪种方式是更明智的方式来决定何时实际运行该功能?

AddNewStuffToList()
{
    // Clear the list and reload it with new data
}

Foo_Tick()
{
    if (updated)
        AddNewStuffToList();

    // Rest of tick function
}

对战:

AddNewStuffToList()
{
    if (updated)
    { 
        // Clear the list and reload it with new data
    }
}

Foo_Tick()
{
    AddNewStuffToList();

    // Rest of tick function
}

为了这个例子,我省略了很多不相关的细节。

3 个答案:

答案 0 :(得分:1)

恕我直言第一个。这个版本分开:

  • 何时更新数据(Foo_Tick)

  • 如何加载数据(AddNewStuffToList())。

第二个选项只是把所有东西混合在一起。

答案 1 :(得分:0)

在更新之前,您可能无法运行该功能。这样,该功能可用于更多目的。

假设你有两个电话,它们都将来到列表中。通过第一次设置,检查函数内部的变量,您只能检查是否有一个调用。相反,如果您在调用数据的函数中检查它,您可以拥有任意数量的输入源,无需更改开始功能。

函数应该非常精确地确定它们正在做什么,并且应该避免需要由另一个函数创建的信息,除非它被传入。

答案 2 :(得分:0)

在第一个版本中,每次都会检查简单变量检查“updated”,并且只有为true才会调用AddNewStuffToList。

使用第二个版本,您将调用AddNewStuffToList,然后每次都检查“更新”。

在这个特定的例子中,假设与变量检查相比,函数调用通常很昂贵,我个人更喜欢第一个版本。

但是,有些情况下,功能内的检查会更好。 e.g。

doSomething(Pointer *p){
  p->doSomethingElse(); 
}

FooTick(){
  Pointer *p = new Pointer();
  // do stuff ...
  // lets do something 

  if (p){
    doSomething(p);
  }
}

这很笨拙,因为每次你打电话给doSomething,你都应该检查一下 没有传递一个糟糕的指针。如果忘记这会怎么样?我们可以获得访问冲突。 在这种情况下,以下情况更好,因为您只在一个地方写支票 没有额外的开销,因为我们总是希望确保我们没有传入错误的指针。

doSomething(Pointer *p){
  if (p){
    p->doSomethingElse(); 
  }
}

总的来说,这取决于具体情况。这里没有正确和错误的答案,只有利弊。