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

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

有帮助吗?

解决方案

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

基本操作员 de Morgan's 其他基本法律真值表,以及例如 disjunctive 联合正常形式让我大开眼界。在我了解它们之前,条件表达式感觉像是危险的野兽。从那时起,我知道我可以在必要时通过打破重炮来鞭打他们!

其他提示

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

您可以查看 Microsoft Pex ,可以帮助你发现你没想过的边缘情况。

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

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

简洁之美是它不需要书本或课堂来学习它。如果你可以分手,那就去做吧。如果您可以删除它的任何部分,请执行此操作。如果你不理解它,那就不同了。而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个变量

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top