LINUX.ORG.RU

java, не упустить дебажный участок кода

 , ,


0

1

Иногда я пишу участок кода который позволяет удобней тестировать(например, игра тетрис, падает 40 блоков - показывается меню, мне лень ждать 40 - поставил 1), таких мест может быть много, сейчас я помечаю их TODO, но даже про TODO можно банально забыть. Как поступать в таких ситуациях?

Вот такой вариант будет хорошим?

public class GlobalVars{
static final boolean DEBUG = true;
}

А во всем другом коде помешать это все в

if(GlobalVars.DEBUG){
// никогда не должно попадать в релиз
}else{
// стандартная логика
}

Блин, ребят, новая проблема всплыла,а как это в коде то все красиво сделать? Сейчас так

if(balls.size > 15) { // TODO not 15 must be MAX_BALL
                        state = State.GAME_OVER;
                        Animation.add("gameOverBlack", 1, 0.4f, 700, new Animation.Sin());
                        Animation.add("gameOverOpacity", 0, 0.85f, 700, new Animation.Sin());
                        //Animation.add("gameOverBlack", 1, 0.4f, 600, new Animation.Linear());
                        //Animation.add("gameOverOpac", 1, 0.4f, 1);
                    }

А дальше появилось несколько вариантов, самый короткий но сложный

if(  (balls.size > 15 && GlobalVars.DEBUG) || balls.size > MAX_BALL )
Можно вообще обобщить 
if( (debug_condition && GlobalVars.DEBUG) || release_condition) 

Или же

if(GlobalVars.DEBUG){
  if(debug_condition){
    // несколько строк, скорее всего одинаковых с нижними
  }else
    // несколько строк... одинаковых...
  }
}else{
  if(release_condition){
    // несколько строк, скорее всего одинаковых с нижними
  }else
    // несколько строк... одинаковых...
  }
}

★★★

Последнее исправление: abs (всего исправлений: 1)

Только лучше не разноси в разные jarники, или не забывай все полностью перекопилять.

Хотя я бы это вынес в конфиг и мавеном при сборке разруливал.

ya-betmen ★★★★★
()

Ну, вот из практики не явовой, как мы такое решаем. У нас заведена переменная глобальная названная по фамилии программиста, к примеру булевая. Перед кусками, которые не должны попасть в релиз, мы делаем так: Ivanov:=True; После такого блока Ivanov:=False; И когда сливаем код в релиз ветку, каждый член команды выгашивает свою глобальную переменную. И если такие блоки не удалить - проект не соберется. Костыль конечно, но у нас и инструментарий далеко не явовый.

RedPossum ★★★★★
()
Последнее исправление: RedPossum (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

Грейдл не умеет подтянуть нужный файл конфига в зависимости от профиля?

Думаю умеет, но я с ним лишь поверхностно работал, он вообще вроде на Scala написан, это разбираться нужно.

Но я не совсем понял что ты предлагаешь? Мою же идею, только не вручную менять GlobalVars.DEBUG, а gradle в зависимости от того релиз или дебаг?

abs ★★★
() автор топика

Новая проблемка всплыла, описал в главном вопросе.

abs ★★★
() автор топика

Если делаешь на время разработки — просто навтыкай TODO в комментарии и возьми себе в привычку проверять все TODO перед коммитом. Если и дальше тебе нужен этот режим — выноси в конфиг приложения.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Если и дальше тебе нужен этот режим

Ох, та я не опытный, я не знаю как оно там будет. Ну пока у меня маленький проект и 1000 строк не превзошел. Но страшно забыть перед релизом какую-то штучку поменять

abs ★★★
() автор топика
Ответ на: комментарий от abs

Мою же идею, только не вручную менять GlobalVars.DEBUG, а gradle в зависимости от того релиз или дебаг?

Нет, все свои константы (ну или только те что хочешь менять) типа MAX_BALL подтягивай из конфига и заведи себе разные версии конфигов под разные профили сборки.

это разбираться нужно.

Блин, тут пол часа максимум доку почитать.

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

Аа, так наверное не выйдет, дело ж не только в константах. Например если захочу рисовать fps на экране только в дебаг версии.

abs ★★★
() автор топика
Ответ на: комментарий от abs

На градле все это как пять копеек делается. Там и так по дефолту два профиля приложения. debug и release. Создаешь папку debug/values и в ней делаешь конфиг типа mygame.xml ака ресурс. А там уже можно делать настройки. Аналогично поступаешь для релиза и ву-аля! У тебя будут два отдельных конфига для релиза и для дебага.

Если хочется попроще, то есть еще булевое значение во встроенном классе BuildConfig.DEBUG, если приложение собрано в дебаг режиме, то оно соответственно будет true.

spoilt ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.