我个人的编程恶魔之一一直是需要由 if 语句(或类似语句)控制的复杂逻辑。也不一定总是那么复杂,有时只需要考虑几个状态。
开发人员在设计期间是否可以执行任何工具或步骤来帮助查看“状态”并采取措施重构代码以简化生成的代码?我正在考虑按照这些思路绘制一个矩阵或其他东西......?
我个人的编程恶魔之一一直是需要由 if 语句(或类似语句)控制的复杂逻辑。也不一定总是那么复杂,有时只需要考虑几个状态。
开发人员在设计期间是否可以执行任何工具或步骤来帮助查看“状态”并采取措施重构代码以简化生成的代码?我正在考虑按照这些思路绘制一个矩阵或其他东西......?
真值表基本上是详尽的方法,并将(希望)突出所有可能性。
您可能想看看Microsoft Pex,它有助于发现您没有想到的边缘案例。
我认为开发人员在问如何在处理复杂的 if 代码时让他的生活更轻松。
我处理复杂代码的方法是尽可能地编写代码并首先清除所有否定。如果您可以通过将其中的一部分放在上面来摆脱化合物,那么就这样做。
简单的美妙之处在于它不需要一本书或一堂课来学习它。如果你能打破它,就这样做。如果您可以删除它的任何部分,请执行此操作。如果你不明白,那就换个方式。而且 flat 几乎总是比嵌套好(感谢 python!)。
阅读起来更简单:
if(broken){
return false;
}
if (simple){
doit();
return true;
}
if(complicated){
divide();
conquor();
}
if(extra){
extra();
}
而不是阅读:
if(!broken && (simple || complicated)){
....
}
return false;
真值表和单元测试 - 绘制表格(n 个变量的 n 维),然后将它们用作单元测试的输入,单元测试可以测试变量的每个组合并验证结果。
这些年来我看到的复杂 IF 的最大问题是人们不会测试所有的分支。确保为每个可能的分支编写一个测试,无论您看起来多么不可能碰到它。
您可能还想尝试卡诺图,它适用于最多 4 个变量。
如果您还没有,我强烈建议您阅读Code Complete。它对诸如此类的主题有很多建议。我现在手边没有我的副本,否则我会在书中发布这部分的摘要。
将逻辑分解为离散单元(a && b 等),每个单元都有自己的变量。然后使用您需要的逻辑构建这些。用适当的名称命名每个变量,以便您的复杂语句具有相当的可读性(尽管它可能会占用几行额外的行和相当多的临时变量)。
你有什么理由不能只用警卫语句处理逻辑?
卡诺图是从真值表(Visage 建议)中获取信息并将其转换为紧凑和/或/非表达式的好方法。这些通常在 EE 数字逻辑课程中教授。
你试过设计模式吗?您可能会查看所谓的策略模式:http ://en.wikipedia.org/wiki/Strategy_pattern
查看核选项:Drools。它有很多内容——我花了一两天时间阅读文献来了解它的功能。但是,如果您的应用程序中复杂的 if-then 逻辑是项目不断发展的一部分(例如,具有模块化算法的应用程序),那么它可能就是这样。