У меня есть функция (С#), которая проверяет четыре набора условий и возвращает логическое значение. Если какое-либо из них верно, возвращается true
. Я уверен, что мог бы упростить логику, но я хочу, чтобы она была достаточно читаемой.
Расширение CodeMaid в Visual Studios сообщает мне, что цикломатическая сложность функции равна 12. Я просмотрел и силоматическая сложность
количество независимых путей через исходный код
Я не понимаю, почему это 12. Я могу думать об этом двояко: либо цикломатическая сложность должна быть равна 2, потому что она всегда проходит по одному и тому же пути, но может вернуть либо true
, либо false
. Или мог бы понять, если бы это было 16, потому что четыре логических значения or
, сложенные вместе в конце, могли быть истинными или ложными, 2*2*2*2 = 16.
Может кто подскажет почему 12? Может быть, даже показать схему, чтобы я мог визуализировать разные пути?
public bool FitsCheckBoxCriteria(TaskClass tasks)
{
// note: bool == true/false comparisons mean you don't have to cast 'bool?' as bool
// if neither checkboxes are checked, show everything
bool showEverything = NoShutDownRequiredCheckBox.IsChecked == false &&
ActiveRequiredCheckBox.IsChecked == false;
// if both are checked, only show active non-shutdown tasks
bool showActiveNonShutdown = ActiveRequiredCheckBox.IsChecked == true &&
tasks.Active == "YES" &&
NoShutDownRequiredCheckBox.IsChecked == true &&
tasks.ShutdownRequired == "NO";
// if active is checked but shudown isn't, display all active
bool showActive = ActiveRequiredCheckBox.IsChecked == true &&
tasks.Active == "YES" &&
NoShutDownRequiredCheckBox.IsChecked == false;
// if non-shutdown is checked but active isn't, display all non-shutdown tasks
bool showNonShutdown = NoShutDownRequiredCheckBox.IsChecked == true &&
tasks.ShutdownRequired == "NO" &&
ActiveRequiredCheckBox.IsChecked == false;
return showEverything || showActiveNonShutdown || showActive || showNonShutdown;
}
Заранее спасибо.
Изменить:
Я изменил это на это. назначение локальных переменных для условий флажка не имело никакого эффекта, но создание логических значений из «ДА» / «НЕТ» увеличило сложность до 14, что, я думаю, я понимаю.
public bool FitsCheckBoxCriteria(LubeTask tasks)
{
bool noShutdownReqChecked = (bool)NoShutDownRequiredCheckBox.IsChecked;
bool activeChecked = (bool)ActiveRequiredCheckBox.IsChecked;
bool active = tasks.Active == "YES" ? true : false;
bool shutdownReq = tasks.ShutdownRequired == "YES" ? true : false;
// if neither checkboxes are checked, show everything
bool showEverything = !noShutdownReqChecked && !activeChecked;
// if both are checked, only show activeChecked non-shutdown tasks
bool showActiveNonShutdown = activeChecked && noShutdownReqChecked && active && !shutdownReq;
// if activeChecked is checked but shudown isn't, display all activeChecked
bool showActive = activeChecked && !noShutdownReqChecked && active;
// if non-shutdown is chceked but activeChecked isn't, display all non-shutdown tasks
bool showNonShutdown = noShutdownReqChecked && !activeChecked && !shutdownReq;
return showEverything || showActiveNonShutdown || showActive || showNonShutdown;
}
== true
и замените== false
на!
? они избыточны - person moarboilerplate   schedule 24.04.2015bool?
, а неbool
, поэтому вместо приведения их всех я просто провел сравнение для удобства чтения. msdn.microsoft.com/en-us/library/bb384091.aspx - person Charles Clayton   schedule 24.04.2015