Прошло много времени с тех пор, как я в последний раз перечитывал Code Complete, но я смутно припоминаю, как Макконнелл обращался к этому, и слова "дизъюнктивная согласованность" всплывают в моей голове.Вкратце,
void f(int x, int y, bool b)
против
void f1(int x, int y)
void f2(int x, int y)
часто является выбором, и в зависимости от того, как схоже или отличается f
будет вести себя при true
против false
, это может сделатьсмысл разбить его на две функции и дать им разные имена.Часто лучше выбрать третий вариант, который состоит в замене bool
на перечисление с двумя значениями, где имя перечисления делает различие ясным.
Ключ в том, чтобы посмотреть на сайты вызовов и увидетьесли смысл понятен только из чтения кода.Если у вас возникает желание добавить комментарий на каждый логический сайт вызовов:
f(3, 4, true /* absoluteWidgetMode */ )
, а сайты вызовов обычно звонят с логическими константами , это сильный запах, что вы должны его сломатьна несколько функций.