@JustMoose
Программист. Радиолюбитель. Прокрастинатор ;)

Как именовать булевские «флаги»?

Всем привет.
Очень много букв про очень маленькую проблему ;)

В процессе обсуждения с коллегами одной проблемы у меня случился когнитивный диссонанс.

Короче. У нас есть проект. Проект - это дофига чужого кода, к которому мы пристраиваем немножко своего кода.

Когда мы добавляем свой код, мы обкладываем его:
#if BUILDFLAG (ENABLE_OUR_KILLER_FEATURE_X)
Ну и при необходимости включить этот кусок кода в самый главный хидер добавляется:
#define ENABLE_OUR_KILLER_FEATURE_X 1

Однако, иногда надо *отключать* уже имеющиеся чужие фичи.
Я предположил, что лучше завести флаг DISABLE_THEIRS_CODE.
И обрамлять чужой код в #if !BUILDFLAG(DISABLE_THEIRS_CODE).
В результате "из коробки" чужой код работает, но если записать:
#define DISABLE_THEIRS_CODE 1
то чужой код отключится.

Дальше случилось весёлое. Коллеги встали на дыбы и сказали, что для *единообразия* лучше все флаги именовать как ENABLE_X.
Но для тех (чужих) фичей, которые надо отключить, просто надо прописать:
#define ENABLE_X 0

Результат - у меня когнитивный диссонанс и понимание, что они предлагают фигню, и так делать не надо.

Проблема в том, что кроме интуиции я ничем свою мысль аргументировать не могу. Ну, разве что "есть две задачи - включить и выключить, и задачи разные".

Есть идеи, чем плох вариант использовать для *отключения* фичей флаг с именем ENABLE?
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
longclaps
@longclaps
Весело у вас )
Флаг DISABLE, буде он принят, будет явно указывать то, что он обрамляет легаси-код. Придёт новый программист в команду, прочтёт вот это моё предыдущее предложение, и будет не заглядывая в историю коммитов понимать, что про заенабленые фичи можно спрашивать у коллег, а задизабленые придётся разгребать самому (
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
В таких случаях надо взвесить все плюсы и минусы.
У твоего варианта какие преимущества? Я не вижу, а из недостатков, что можно запутаться в включением/отключением фич.
Ответ написан
@majstar_Zubr
C++, C#, gamedev
Поскольку в любом случае придется лезть в чужой код и обрамлять там что-то, то единообразный подход уменьшит общую сложность восприятия кода.

С психологической точки зрения проблема в том, что вы не хотите брать ответственность за "чужой" код. Как только вы позволите себе взять ответственность за т.н. "чужой" код, потому что он сейчас вовсе не чужой, он ваш т.к. он под вашей опекой, вы взялись за его модификацию, ваше подсознание не будет противится и в результате у вас будет меньше склонностей к внедрению в код лишних сущностей, и в целом работа пойдет быстрее. ( Если переформулировать ваше предложение: вы предлагали вынести на функциональный уровень управления фичами разделение кода в зависимости от просихождения кода. )
Ответ написан
Ваш ответ на вопрос

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

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