@hell0_w0rId

Нужно ли сокращать код?

Смотрел я чьи-то исходники и наткнулся на это:
struct
{	
	bool btn_state: 1;
	bool btn_flag: 1;
	bool hold_flag: 1;
	bool counter_flag: 1;
	bool isHolded_f: 1;
	bool isRelease_f: 1;
	bool isPress_f: 1;
	bool step_flag: 1;
	bool oneClick_f: 1;
	bool isOne_f: 1;

} fl;
fl flags;
// ........ 

boolean GButton::isPress() {
	if (_tickMode) GButton::tick();
	if (flags.isPress_f) {
		flags.isPress_f = false;
		return true;
	} else return false;
}
boolean GButton::isRelease() {
	if (_tickMode) GButton::tick();
	if (flags.isRelease_f) {
		flags.isRelease_f = false;
		return true;
	} else return false;
}
boolean GButton::isClick() {	
	if (_tickMode) GButton::tick();
	if (flags.isOne_f) {
		flags.isOne_f = false;
		return true;
	} else return false;
}
boolean GButton::isHolded() {
	if (_tickMode) GButton::tick();
	if (flags.isHolded_f) {
		flags.isHolded_f = false;
		return true;
	} else return false;
}


Код абсолютно одинаков, только разные названия переменных и функций.
Стоит ли сокращать код? И как?

Еще покопал проект и увидел, что в главном файле очень много макросов. Мне кажется, их нужно вынести в отдельный файл.
  • Вопрос задан
  • 162 просмотра
Решения вопроса 2
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Конечно нужно, копипаста это всегда плохо, можно ошибиться при рефакторинге, добавлении новых флагов и изменении общей логики.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Стоит ли сокращать код? И как?

Можно сделать так:
struct
{	
  bool btn_state;
  bool btn_flag;
  bool hold_flag;
  bool counter_flag;
  bool isHolded_f;
  bool isRelease_f;
  bool isPress_f;
  bool step_flag;
  bool oneClick_f;
  bool isOne_f;

} fl;
fl flags;
// ........ 

boolean GButton::isFlag(bool& flag) {
  if (_tickMode) GButton::tick();
  if (flag) {
    flag = false;
    return true;
  } else return false;
}

boolean GButton::isPress() {
  return isFlag(flags.isPress_f);
}
boolean GButton::isRelease() {
  return isFlag(flags.isRelease_f);
}
boolean GButton::isClick() {	
  return isFlag(flags.isOne_f);
}
boolean GButton::isHolded() {
  return isFlag(flags.isHolded_f);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
Код можно сократить, если есть такое желание и нет более насущных дел.
Код можно не сокращать - он работает, не таит в себе никаких подводных камней - а его производительность, как уже выяснили аналитики, совершенно некритична.
Если его приходится постоянно читать и эта копипаста тратит время читающего - лучше добавить комментарий с пояснениями, чтобы это прекратить.
Ответ написан
Комментировать
@majstar_Zubr
C++, C#, gamedev
Нет, все просто, понятно, и главное - быстро работает. Если сократить, может пострадать быстродействие.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы