有没有工具来帮助复杂的'if'逻辑?

时间:2009-03-09 13:00:04

标签: logic

我的一个个人编程恶魔一直是复杂的逻辑,需要由if语句(或类似的)控制。并不总是那么复杂,有时只需要考虑几个状态。

开发人员在设计期间是否可以执行任何工具或步骤来帮助查看“状态”并采取措施重构代码以简化生成的代码?我正在考虑制作一个矩阵或类似的东西......?

12 个答案:

答案 0 :(得分:17)

我建议每个有抱负的程序员使用propositional logic的基础课程。起初,符号和希腊字母似乎对数学规则不利,但它实际上是你技能组中最强大(而且经常被忽略)的工具之一,而且很简单,核心。

basic operatorsde Morgan'sother basic lawstruth tables以及例如disjunctiveconjunctive normal forms令我大开眼界。在我了解它们之前,条件表达式感觉像是危险的野兽。从那时起,我知道我可以在必要时通过打破重炮来鞭打他们!

答案 1 :(得分:5)

真理表基本上是详尽的方法,并且(希望)突出了所有可能性。

您可以查看Microsoft Pex,这有助于发现您没有想到的边缘情况。

答案 2 :(得分:4)

我认为开发人员在处理复杂的代码时会问如何让他的生活更轻松。

我处理复杂的方式,如果代码是尽可能平坦的代码,并首先清除所有的否定。如果你把它的一部分放在上面就可以去除化合物,那就去做吧。

简洁之美是它不需要书本或课堂来学习它。如果你可以分手,那就去做吧。如果您可以删除它的任何部分,请执行此操作。如果你不理解它,那就不同了。而flat几乎总是比嵌套更好(感谢python!)。

阅读起来比较简单:

if(broken){
  return false;
}
if (simple){
  doit();
  return true;
}
if(complicated){
  divide();
  conquor();
}
if(extra){
  extra();
}

比阅读:

if(!broken && (simple || complicated)){
 ....
}
return false;

答案 3 :(得分:3)

真值表和单元测试 - 绘制表(n个变量的n维),然后将它们用作单元测试的输入,可以测试每个变量组合并验证结果。

答案 4 :(得分:2)

我多年来看到的复杂IF的最大问题是人们不会测试所有分支机构。确保为每个可能的分支编写一个测试,无论你看起来多么不可能。

答案 5 :(得分:2)

您可能还想尝试Karnaugh maps,最多可以使用4个变量。

答案 6 :(得分:1)

如果您还没有,我强烈建议您阅读Code Complete。它对此类主题提出了很多建议。我目前没有方便的副本,否则我会在书中发布这一部分的摘要。

答案 7 :(得分:0)

将逻辑拆分为离散单位(a&& b等),每个单位都有自己的变量。然后使用您需要的逻辑构建它们。使用适当的名称为每个变量命名,以便您的复杂语句具有相当的可读性(尽管它可能会占用额外的几行和一些临时变量)。

答案 8 :(得分:0)

你有什么理由不能用守护语句处理逻辑吗?

答案 9 :(得分:0)

Karnaugh maps可以很好地从真值表中获取信息(由Visage建议)并将它们转换为紧凑和/或/不表达式。这些通常在EE数字逻辑课程中讲授。

答案 10 :(得分:0)

你尝试过设计模式吗?您可以查看所谓的策略模式:http://en.wikipedia.org/wiki/Strategy_pattern

答案 11 :(得分:0)

查看核选项:Drools。它有很多东西 - 花了我一两天时间阅读文献只是为了掌握它的能力。但是,如果您的应用程序中复杂的if-then逻辑是项目的一个不断发展的部分(例如,具有模块化算法的应用程序),则可能就是这样。