2009-07-22 55 views
0

我有一些數據是從服務器加載的,但不能保證當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 
} 

我省略了很多細節無關的例子的緣故。

回答

1

恕我直言第一個。這個版本分開:

  • 何時更新數據(Foo_Tick)

FROM

  • 如何加載數據(AddNewStuffToList())。

第二個選項只是所有的東西混合在一起。

0

您應該在更新之前不要運行該函數。這樣,該功能可以用於更多目的。

比方說,你有2個電話,無論是要來,並把數據到列表中。在第一次設置時,檢查函數內部的變量,只能檢查是否有一個調用進來,而如果在調用數據的函數中檢查它,則可以根據需要使用盡可能多的輸入源,而不必改變開始功能。

功能應該是他們在做什麼真正準確的,除非它是在傳遞應該避免需要通過另一個函數創建的信息。

0

在第一個版本的簡單變量檢查「更新」,將每次檢查,只如果屬實將AddNewStuffToList被調用。

有了第二個版本,你會打電話給AddNewStuffToList跟着一個校驗,以「更新」每一次。

在這種特定情況下,考慮到函數調用相比可變檢查我個人比較喜歡的第一個版本通常是昂貴的。

然而,也有情況下,當在函數內部的檢查會更好。 例如

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

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

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

這是因爲clumbsy每次調用DoSomething的時候你應該檢查你 不是在傳遞一個壞的指針。如果這被遺忘了會怎樣?我們可能會遇到訪問衝突。 在這種情況下,以下情況會更好,因爲您只在一個位置寫入支票,並且沒有額外的額外開銷,因爲我們總是希望確保不會傳入錯誤的指針。

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

所以一般來說,這取決於情況。沒有正確和錯誤的答案,只是利弊在這裏。

相關問題