Две функции или логический параметр? - PullRequest
5 голосов
/ 02 октября 2010

Существует ли какое-либо правило, когда использовать две функции или когда передавать логический параметр.

Спасибо

Ответы [ 2 ]

7 голосов
/ 02 октября 2010

Прошло много времени с тех пор, как я в последний раз перечитывал 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 */ )

, а сайты вызовов обычно звонят с логическими константами , это сильный запах, что вы должны его сломатьна несколько функций.

4 голосов
/ 02 октября 2010

Булевы параметры бессмысленны в большинстве случаев , в основном заслуживают той же критики магические числа делают. У вас нет шансов понять, что делается, просто посмотрев на вызов функции.

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

Вместо этого всегда заставляйте программиста быть явным :

Используйте перечисления , чтобы дать содержательные описания для различия, или просто используйте отдельные функции .

Сравните:

WriteFile(path, "Hello, World", true)

с

WriteFile(path, "Hello, World", FileMode.Append)

или просто

AppendFile(path, "Hello, World")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...