Я написал код, который присваивает переменные, используя результаты условий выражения без явного использования IF-ELSE заявления.Blending Булева алгебра и Числовой Алгебра назначить переменные
В простейшем виде проблема выглядит следующим образом:
Version 1
if (x < K)
y = A;
else
y = B;
Я видел «трюк» в прошлом, в котором люди выполнить ту же задачу в одном линии без условного так:
Version 2
y = (x < K) * A + !(x < K) * B;
Этот подход довольно легко распространяется для обработки заданий IF-ELSE IF-ELSE
. Хитрость заключается в том, чтобы гарантировать, что условия являются взаимоисключающими.
С точки зрения модульного тестирования, я должен достичь 100% покрытия кода.
Мои коллеги согласны, что версия 2 является более элегантным, но они утверждают, что это менее читаемыми. Более того, они утверждают, что я являюсь «боковым шагом» по охвату покрытия и что я смог бы достичь 100% -ного охвата пути путем «скрытия» условной логики внутри одной строки кода без фактического осуществления обоих условий ((x < K)
и !(x < K)
).
Я утверждаю, что я могу смешивать булеву алгебру и числовую алгебру для выполнения назначения переменных, потому что компьютер рассматривает логические «истинные» и «ложные» как «1» и «0», которые можно умножить на «float» и переменные 'int'. Для меня это просто арифметическое выражение с нулями и множителями.
Почему я это делаю?
Я делаю эту смесь булевой и числовой алгебр, чтобы минимизировать количество IF-операторов, минимизировать строки кода и общую очистку кода. Очевидно, что производительность может быть улучшена путем сохранения результата условия переменной и ссылки.
Вопрос
Является ли эта практика (и тройные операторы) осуждено с точки зрения модульного тестирования?
Если этот вопрос слишком субъективен, предложите изменения.
1.Это не компьютер, который «обрабатывает логические« истинные »и« ложные »как« 1 »и« 0 », это особый язык. Других языков нет. 2. Почему бы просто не использовать условный оператор? Это, по-видимому, должно избегать «охвата бокового шага», одновременно удовлетворяя ваши другие цели. –
Спасибо за информацию. Я не понимал, насколько это зависит от языка. К сожалению, условный оператор недоступен на языке, который я использую. – zigzag