while(player.CloseMenu(menuType))
{
}
player.CloseMenu(menuType)
將關閉所選類型的一個菜單,或者如果沒有剩下的類型,則返回false。正在使用,而這個好嗎?
是否可以使用這樣的空循環關閉給定類型的所有菜單?
while(player.CloseMenu(menuType))
{
}
player.CloseMenu(menuType)
將關閉所選類型的一個菜單,或者如果沒有剩下的類型,則返回false。正在使用,而這個好嗎?
是否可以使用這樣的空循環關閉給定類型的所有菜單?
我會擴展所有這些答案並創建一個名爲CloseAllMenus(MenuType menuType)
的方法。然後你可以把任何一種醜陋的實現放在那裏,當你打電話時它會明白它在做什麼。您當前的代碼無法解釋究竟發生了什麼,除非您已經知道可以有多個特定類型的菜單處於打開狀態,並且此調用僅會關閉其中的一個。
實際上,這是在播放器的擴展方法,'void CloseAllMenues(this Player player,Type menuType)' – bevacqua 2011-04-12 00:41:42
@Nico這改變了一點。如果這是函數中唯一的東西,我會說你可能只需要添加一個註釋就好像'// CloseMenu在找不到該類型的菜單要關閉時返回false,那就沒問題了 – 2011-04-12 04:28:32
如果其他人需要閱讀它,我會提供更多的自我文檔。
問題是你必須從調用被推斷爲一個bool來理解的事實推斷。
也許如果你把它命名爲player.IsMoreAfterClose()。
或
while(true)
{
bool b = player.CloseMenu(menuType);
if(!b) break;
}
或
bool b = true;
while(b)
{
b = player.CloseMenu(menuType);
}
while(true){/ * blah */break; }是不好的形式 - 什麼可能會更好是while(player.HasMenusOpen(menuType)){player.CloseMenu(menuType); } - 這裏的破壞條件應該是 – fusi 2011-04-11 23:44:34
imho,我不同意它在循環中的不良形式(whos體有相對較低的行數)。 'while(true)'和'break'的組合形成了一個(對我來說)清晰的'heres發生了什麼'和'heres是什麼使它停止'的圖像。 – 2011-04-12 00:39:40
它會工作,很明顯,但它使代碼有點難以閱讀/維護。循環條件可以檢查任何打開的菜單,循環體可以關閉一個。
當想出巧妙的代碼處理方式時要小心。在短期內它可以節省幾個按鍵,但有一天別人可能會看到這個代碼,並想知道:
請記住,在忘記此代碼的詳細信息後的幾個月內,別人可能會很好。
保存幾行代碼並不是什麼大不了的事。任何必須只寫一次的東西都是有限的工作量。任何混淆支持未來的事物都會產生一個未知數量較少的工作量。
可以這樣做,因爲這意味着do something until certain condition is met
。但最好將其納入CloseMenu
函數中,以便您不必多次重複此指令,實際上它是關閉菜單的一種變體,您要關閉所有菜單。您可以向函數添加布爾參數以指示是否要關閉所有菜單。
bool CloseMenu(type, closeAll){
if(closeAll)
while(exists(type))
{ close...
else
if(exists(type)
{ close...
}
布爾參數不直觀。很難理解什麼方法在做什麼,例如CloseMenu('type',false)和CloseMenu('type',true)之間的區別並不明顯。我建議使用有意義的名稱添加兩個不同的公共方法,如CloseAllMenus。 – 2011-04-11 23:58:33
很明顯,如果你閱讀API(甚至函數簽名就足夠了,因爲(正確選擇的)參數名稱可以表明它的用途),這是開發人員應該做的。 – manji 2011-04-12 00:25:07
如果代碼在閱讀API時很容易理解,那就好多了。爲什麼開發人員應該浪費時間閱讀API? :) – 2011-04-12 00:33:19
也許「正確的」事情是從While/Close轉換到沒有主體進行For/Open與身體進行關閉操作。
foreach(var menu in player.OpenMenus)
menu.Close();
或:
player.OpenMenus.ForEach(c => c.Close());
這似乎有點標新立異。 – 2011-04-11 23:35:40
是的,這正是我的觀點。我還能做什麼,而不能觸摸功能的身體? – bevacqua 2011-04-11 23:38:05
你正在使用什麼樣的框架? – 2011-04-11 23:38:19