Jawa / Говнокод #7590 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
if(block == Block.blockDiamond || block == Block.oreDiamond)
        {
            return toolMaterial.getHarvestLevel() >= 2;
        }
        if(block == Block.blockGold || block == Block.oreGold)
        {
            return toolMaterial.getHarvestLevel() >= 2;
        }
        if(block == Block.blockSteel || block == Block.oreIron)
        {
            return toolMaterial.getHarvestLevel() >= 1;
        }
        if(block == Block.blockLapis || block == Block.oreLapis)
        {
            return toolMaterial.getHarvestLevel() >= 1;
        }
        if(block == Block.oreRedstone || block == Block.oreRedstoneGlowing)
        {
            return toolMaterial.getHarvestLevel() >= 2;
        }

Из сорцов майнсрафта.
Нахрена делать из двух ifов пять?!

Запостил: RaZeR RaZeR, (Updated )

Комментарии (13) RSS

  • Когда смотрю на такие портянки невольно начинаю думать о Data Driven Code.
    Ответить
    • какой-нибудь внешний конфиг в ресурсах идеально подошёл бы для таких вещей...
      Ответить
  • >Нахрена делать из двух ifов пять?!
    Чтобы потом было легче вносить изменения.
    Ответить
    • Угу, раз уж всё равно хардкод - так хотя бы логическая группировка есть... Практика показывает, что практически каждый раз, когда я создаю большой иф с кучей условий - их комбинации упорно вылазят боком до тех пор, пока код не переписан как-нибудь по-другому.
      Ответить
    • Ну не знаю. Лично мне кажется, что от этого читабельность страдает (впрочем, от двух ифов тоже, не отрицаю).
      Тут как вариант можно было бы сделать поле HarvestLevel у блока и потом просто сравнивать его с HarvestLevel'ом кирки.

      Либо, как вариант "легче вносить изменения":
      List<Block> harv1 = new ArrayList<Block>();
      List<Block> harv2 = new ArrayList<Block>();
      bool harvestable = false;
      <...>
      harv1.add(Block.blockSteel);
      harv1.add(Block.oreIron);
      <...>

      Iterator it = harv1.iterator();
      while (it.hasNext())
      {
      if (block == (Block)it.next())
      {
      if (harvestLevel >= 1) harvestable = true;
      }
      }

      <...>
      и т.д.
      Либо конфиг, как сказал Kirinyale.
      Ответить
      • Уродство. Если уж нельзя у Block завести поле HarvestLevel, то следует использовать IdentityHashMap<Block,Integer> (или EnumMap<>) и простой get. Заполнить его хоть из конфига, хоть захардкодить.

        Если конфиг не нужен, не планируется расширение или изменение в динамике, то хорошо подойдут enum-ы.
        Ответить
  • А где Вы взяли сырцы minecraft?! Заранее спасибо
    Ответить
  • б,D)M.R,K$X"T.D)A"Z(RF.C(J!N.O(T!H!F)E MY$A"J!PO:Y?F:Y?A:A:Q.E$W"H!R$R!N F:C$H,L(S(O(K(K?I)T(J?G?P!T)X?E)L$D:W$H!P!Y$F$P AP!F.R:Z!H:K LKC)F"W?D!T.J"R,M?F,R.Z)G$H"U)E)X)D:X)Z Q(Q.W"C.G J:C?H$J"E.B"P:L(R(Y(K.I(O?P?J?U$BC"A?S(G:A)Q)R!M$Y P)A?P,K"W)D"M?M!VS:S:L(H:C?S?W$H,K,Y"A(F.Z Y.I!I$A?GI D)K)Z.K.Y!J)M(J!R$T.Q.K Y?K$A(O:J,F?K,G"I:P"W?L)N?B$FX(Q.D E$N,Q)UI!T?OBI!G$J$N,U,A?P$A,V,L(K B(U?S?H)U"RE(LB.J.I.NQ$D:P.O)U!Y$W(G?B:TFQ.N$R:I:F?E,G?C P:SUI)J:P,H!L Y)O P M.PZ)K:X"D(I$YZ"W!H,R$T:E$B$DC)T$M,DN)F$YF.FJ!C)X.Q)N$D L,V?C(F$L"R:F!B"Y!O!M:O,EV:Z)N$G U,U)N:CV"L"H:F:S)F.V"K(R R:W$R!H,Y.DC"Y:Y?YM$T,T"Z:A)V C,B$G(O?D PT$U)H:Q)Z:D"Q$E(LD.W,G S.L(M.Z"P.M,W?V E:U,K"H(K?L(K.S,Z$D(Z?W,J X:C$PL$JB,U"U"L$W(S$S.G$H(T A C L!K(I,S.G)X"S L$I,Z!A$K$YJ"F:S)W:X?T.O"L$K,I(T)V.L:H:X$V(D:P,N.B:X!G(T.K"D!W"JK!J U)KL"G,T,P!U)D?T:R"O I?B,T:D W.T,A$H W.G$F?C!P.D,Y U Y E T,P(C(Q(J.B U!I.PC!A(BK:Q"W.B(D"I.K?K(W!VJ.Y:D?T!V!L)G?R!XTK R.X)F,G)Z:F,Q!H:Y(J$V$L"F)F(W B,G)EX"CV)IH,T?T L!P"XYTRN D"Z:G?N$I"M(J V,R!A)W(L"O.N)T:V)Y(W$L?T B?P)Q K$Q?IJ.Y(Q(J)L"H.O.N.B$A$O,A)WY,T(O.Z,G$X$CE)W"H$N$H(T$E UK!EM(N(P!P)J!P?R!A!L:Z(G$J I$E A$T,T,B(R:L?G)V$B)G!H$D(E?UРKTDEDSFDXOTWYWQUFFICGSJQIXUCIFIHEQCROWLWHIJMZTQDXNFVMMQCSAZNREIKSNWRCBMVUDMKRZDJYDMKVBREHRNLEGKIHMRQPQJPQNLCUVGNFKXZQBFWAUDZLWCYJZYZEBIMMNHQULSVLHLZOBICJIVBZODCCQQKMMMWCLFQVPYOYAJZNXIGSOCKSUICBDPZMUCIYVGQSRCLZRHCWKFZMCCQDFULOSZRTXKEV
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8