Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Угу, раз уж всё равно хардкод - так хотя бы логическая группировка есть... Практика показывает, что практически каждый раз, когда я создаю большой иф с кучей условий - их комбинации упорно вылазят боком до тех пор, пока код не переписан как-нибудь по-другому.
Ну не знаю. Лично мне кажется, что от этого читабельность страдает (впрочем, от двух ифов тоже, не отрицаю).
Тут как вариант можно было бы сделать поле 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;
}
}
Уродство. Если уж нельзя у Block завести поле HarvestLevel, то следует использовать IdentityHashMap<Block,Integer> (или EnumMap<>) и простой get. Заполнить его хоть из конфига, хоть захардкодить.
Если конфиг не нужен, не планируется расширение или изменение в динамике, то хорошо подойдут enum-ы.
Чтобы потом было легче вносить изменения.
Тут как вариант можно было бы сделать поле 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.
Если конфиг не нужен, не планируется расширение или изменение в динамике, то хорошо подойдут enum-ы.