Всем добрый день.
Много слышал про выражение "говнокод".
Хочу для себя разобрать это на примере (в данном случае моем).
Задача - отрисовать змейку на игровом поле (голова и туловище и цветом обозначаем живая она или мертвая).
Итак 2 варианта
1)
partOfSnake = snakeParts.get(0);
game.setCellValueEx(partOfSnake.x, partOfSnake.x, Color.NONE, HEAD_SIGN, isAlive?Color.BLACK:Color.RED, 75);
for (int i = 1; i < snakeLength; i++) {
partOfSnake = snakeParts.get(i);
game.setCellValueEx(partOfSnake.x, partOfSnake.y, Color.NONE, BODY_SIGN, isAlive?Color.BLACK:Color.RED,75);
}
2)
for (int i = 0; i < snakeLength; i++) {
partOfSnake = snakeParts.get(i);
game.setCellValueEx(partOfSnake.x, partOfSnake.y, Color.NONE, i==0?HEAD_SIGN:BODY_SIGN, isAlive?Color.BLACK:Color.RED,75);
}
3) аналогичен варианту 2 только отформатированный покрасивее
for (int i = 0; i < snakeLength; i++) {
partOfSnake = snakeParts.get(i);
game.setCellValueEx(partOfSnake.x, partOfSnake.y, Color.NONE,
i==0?HEAD_SIGN:BODY_SIGN,
isAlive?Color.BLACK:Color.RED,
75);
}
Вопрос:
1) Какой вариант менее говнокодистый?
2) Как должен выглядеть правильный, красивый код?
Спасибо.
Юрий
17 уровень
Какое из решений менее говнокодистее и как нужно
Решен
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павел Безумный учёный Expert
24 сентября 2021, 22:03решение
На мой взгляд, стоит ввести дополнительные переменные для результатов вычислений тернарных операторов:
Значение snakeColor достаточно вычислить один раз, в зависимости от того, "жива" змея или нет. Значение sign вычисляется заново на каждой итерации цикла в зависимости от индекса текущего элемента.
Благодаря использованию промежуточных переменных snakeColor и sign вызов метода setCellValueEx() становится более удобочитаемым. +2