【发布时间】:2015-12-02 23:29:48
【问题描述】:
我编写了一些代码,它使用条件表达式的结果来分配变量,而没有显式使用 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 版更优雅,但他们认为它的可读性较差。此外,他们认为我“回避”了路径覆盖率要求,并且我可以通过在单行代码中“隐藏”条件逻辑来实现 100% 的路径覆盖率,而无需实际执行这两个条件((x < K)和!(x < K))。
我认为我能够混合布尔代数和数值代数来执行变量赋值,因为计算机将布尔“真”和“假”视为“1”和“0”,它们可以乘以“浮点”和“ int'变量。对我来说,它只是一个零和一乘以变量的算术表达式。
我为什么要这样做?
我正在混合使用布尔代数和数字代数,以最大限度地减少 IF 语句的数量,最大限度地减少代码行数和一般代码清理。显然可以通过将条件结果保存到变量并引用来提高性能。
问题
从单元测试的角度来看,这种做法(和三元运算符)是否令人不快?
如果这个问题过于主观,请提出修改意见。
【问题讨论】:
-
1.不是计算机“将布尔值'true'和'false'视为'1'和'0'”,而是特定的语言。其他语言没有。 2. 为什么不直接使用条件运算符?这大概应该避免“绕过路径覆盖”,同时满足您的其他目标。
-
感谢您的信息。我不明白这是多么依赖于语言。不幸的是,条件运算符在我使用的语言中不可用。
标签: logic variable-assignment logical-operators