2014-12-07 80 views
-1

所以我一直在閱讀Zed Shaw的「Learn Python the Hard Way」一書,它說使用超過2個if語句很糟糕。我目前正在寫一個遊戲,它會更有意義,我使用多個if語句:爲什麼認爲深度超過2時認爲不好?

shoot = -50 
zombie_hp = -100 

def zombie1(shoot, zombie_hp): 
    return shoot - zombie_hp 

def attack(): 
    attack = raw_input("What will you do?: ") 
    print zombie1(zombie_hp, shoot) 
    if attack == "shoot": 
     if shoot == -50: 
      print "Zombie health 50/100" 
      attack2 = raw_input("What will you do?: ") 
      print zombie1(zombie_hp, shoot) 
      if attack == "shoot": 
       print "Zombie health 0/100 (Zombie dies)" 
attack() 

現在爲什麼這樣做不好if語句深深這一去3?謝謝!

+2

做,如果攻擊==拍和拍== -50:這是不是真的壞(如一切都將正常工作),但它取決於上下文真的。如果你可以避免使用大量的if語句,它會使你的代碼清理器。 – 2014-12-07 04:42:42

+1

我認爲所有的語言:這只是醜陋的看看。順便說一句,你不需要第二個'如果攻擊==「射擊」'因爲你已經在你的第一個if語句中檢查了它。 – Mikey 2014-12-07 05:01:37

+0

這裏的問題不是嵌套深度本身,它更普遍的是糟糕的代碼結構。內部的'if'是外部部分的重複,這使得你容易受到攻擊而不是'attack2'的攻擊。此外,全局變量是一個壞主意,考慮面向對象,有一個'健康'屬性的'殭屍'類實例。 – jonrsharpe 2014-12-07 09:12:28

回答

1

我認爲這是深嵌套if分支可以限制您的代碼可以擴展很容易。舉個例子,如果將來你想要實施不同程度傷害的攻擊或具有不同數量生命值的殭屍,會怎麼樣?我的建議是避免委託自己爲每個不同的攻擊序列和殭屍組合創建明確不同的if分支條件。

這個鏈接也給出了爲什麼你可能想避免這種模式的一些更具體的例子: http://c2.com/cgi/wiki?ArrowAntiPattern

0

1)使之更難以對其他開發者理解,更重要的是 - 這使得它更難爲自己瞭解你什麼時候回頭看。

2)它使你的代碼不靈活和脆弱。

3)Tell, don't ask

相關問題