我已经写了一些代码,它使用条件表达式的结果分配变量而不显式使用IF-ELSE语句。混合布尔代数和数值代数来分配变量
在最简单的形式,问题是这样的:
1版
if (x < K)
y = A;
else
y = B;
我已经看到在过去的一个“绝招”,使人们完成相同的任务在一个线而不条件是这样的:
2版
y = (x < K) * A + !(x < K) * B;
此方法相对容易地扩展以处理IF-ELSE IF-ELSE
分配。诀窍是确保条件都是互斥的。
从单元测试的角度来看,我需要达到100%的代码路径覆盖率。
我的同事同意第2版更优雅,但他们认为它的可读性较差。此外,他们认为我“侧面推进”了路径覆盖要求,并且通过在单行代码中“隐藏”条件逻辑而不实际执行两个条件((x < K)
和!(x < K)
),我将能够实现100%的路径覆盖)。
我认为我可以混合布尔代数和数字代数来执行变量赋值,因为计算机将布尔值'true'和'false'视为可以乘以'float'的'1'和'0'并且'int'变量。对我来说,它变成了一个简单的算术表达式,它用零和变量乘以变量。
我为什么要这样做?
我正在做这种布尔和数字代数的混合,以最大限度地减少IF语句的数量,最小化代码行和一般代码清理。通过将条件的结果保存到变量并引用,显然可以提高性能。
问题
,这种做法(和三元运营商)从单元测试的角度来看令人难以接受的?
如果这个问题太主观,请提出修改建议。
1。它不是将“布尔”“真”和“假”视为“1”和“0”的计算机,它是特定的语言。其他语言不。 2.为什么不使用条件运算符?这大概应该避免“侧步路径覆盖”,同时满足你的其他目标。 –
感谢您的信息。我不明白这是如何依赖语言。不幸的是,条件运算符在我使用的语言中不可用。 – zigzag