Logic 是否有任何工具可以帮助您处理复杂的';如果';逻辑?

Logic 是否有任何工具可以帮助您处理复杂的';如果';逻辑?,logic,Logic,我个人编程中的一个难题一直是复杂的逻辑,需要由if语句(或类似语句)控制。也不一定总是那么复杂,有时只是需要说明的几个国家 开发人员在设计期间是否可以执行任何工具或步骤来帮助查看“状态”,并采取措施重构代码以简化生成的代码?我正在考虑绘制一个矩阵或类似的东西…?真值表和单元测试-绘制这些表(n维为n个变量),然后将它们作为单元测试的输入,单元测试可以测试变量的每个组合并验证结果。将逻辑分解为离散单元(a和b等),每个都有自己的变量。然后使用您需要的逻辑构建这些。用适当的名称命名每个变量,使您的复

我个人编程中的一个难题一直是复杂的逻辑,需要由if语句(或类似语句)控制。也不一定总是那么复杂,有时只是需要说明的几个国家


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

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

将逻辑分解为离散单元(a和b等),每个都有自己的变量。然后使用您需要的逻辑构建这些。用适当的名称命名每个变量,使您的复杂语句具有相当的可读性(尽管它可能会占用多行代码和相当多的临时变量)。

我建议为每个有抱负的程序员开设一门基础课程。起初,符号和希腊字母可能让数学厌恶者感到不快,但它确实是你技能集中最强大(也是经常被忽视)的工具之一,而且在核心部分相当简单


和的存在使我大开眼界。在我了解它们之前,条件表达感觉像是危险的野兽。从那以后,我知道只要有必要,我可以用重炮来鞭策他们屈服

真值表基本上是详尽无遗的方法,并且(希望)会突出所有可能性


你可能想看一看,这有助于找出你没有想到的边缘案例。

多年来,我在复杂IFs中看到的最大问题是人们没有测试所有分支。确保为每个可能的分支编写一个测试,无论它看起来多么不可能命中它。

有什么原因不能用guard语句处理逻辑吗?

您可能还想尝试一下,这对最多4个变量都很好。

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

如果您还没有,我强烈建议您阅读。它有很多关于这类话题的建议。我现在手头没有我的副本,否则我会在书中发布这一部分的摘要。

你尝试过设计模式吗?您可以研究一下所谓的策略模式:

我认为开发人员在询问如何在处理复杂的if代码时让自己的生活更轻松

我处理复杂if代码的方法是尽可能简单地编写代码,并首先剔除所有否定。若你们可以通过在上面放一部分来去除化合物If,那个么就这样做

简单之美在于它不需要一本书或一门课就能学会。如果你能打破它,就这样做。如果您可以删除它的任何部分,请这样做。如果你不明白,就换一种方式去做。而且,flat几乎总是比nested好(谢谢python!)

阅读起来更简单:

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

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

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

真值表始终是二维的(除非有新的开发?)。你是说n个变量对应n个列?多维真值表?听起来很刺激!呃。。。真值表包含所有变量的列和所有值组合的行。可以表示任意多个变量。多变量真值表可以归类为多维(每个变量有一个新的轴)。然而,由于我们的大脑局限于三维空间,我们往往会将它们折叠起来。我们也倾向于在平面上做,所以再次将它们折叠成2d表格:)@Bill-你可以有任意多个维度-如果我想提出一个基于3个变量的布尔值,例如,我会有一个2x2x2表格,代表8个离散的输入组合…好的,这就是我采取的方法,问题是,当我确定需要新分支时,我发现自己在填充新分支,但找不到现有分支。这显然导致了意大利面代码。。。我需要一种方法来拍摄这张照片,而“放眼全局”的卡诺地图对这张照片很有用。真可惜,我对他们恨之入骨。他们让我确信我永远都不想成为一名计算机工程师。:-)