代码之家  ›  专栏  ›  技术社区  ›  Adam Naylor

有什么工具可以帮助处理复杂的if逻辑吗?

  •  10
  • Adam Naylor  · 技术社区  · 17 年前

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

    开发人员在设计期间是否可以执行任何工具或步骤来帮助查看“状态”,并采取措施来重构代码以简化生成的代码?我在想画一个矩阵或者沿着这些线做些什么…?

    12 回复  |  直到 14 年前
        1
  •  17
  •   Pontus Gagge    14 年前

    我推荐一门基础课程 propositional logic 为每一个有抱负的程序员。起初,符号和希腊字母可能会让数学爱好者感到不快,但它确实是你技能集中最强大(并且经常被忽视)的工具之一,而且在核心部分非常简单。

    这个 basic operators , de Morgan's 和 other basic laws , truth tables 和存在,例如 disjunctive 和 conjunctive normal forms 让我大开眼界。在我了解它们之前,条件表达式感觉像是危险的野兽。从那以后,我就知道,只要有必要,我可以用重炮来鞭打他们,使他们屈服!

        2
  •  5
  •   teedyay    17 年前

    真理表基本上是一种详尽的方法,并且(有希望)强调所有的可能性。

    你可能想看看 Microsoft Pex 这有助于发现你没想到的边缘病例。

        3
  •  4
  •   Nthalk    14 年前

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

    我处理复杂的代码的方法是尽可能简单地编写代码,并首先清除所有否定项。如果你能把化合物的一部分放在上面,就可以去掉它。

    简单的好处是不需要一本书或一门课来学习它。如果你能拆散它,就这么做。如果你能去掉它的任何部分,就这样做。如果你不明白,就换一种方式。扁平的几乎总是比嵌套的要好(多亏了python!).

    阅读起来更简单:

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

    而不是读:

    if(!broken && (simple || complicated)){
     ....
    }
    return false;
    
        4
  •  3
  •   pauljwilliams    17 年前

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

        5
  •  2
  •   HLGEM    17 年前

    多年来,我在复杂的国际单项体育联合会中看到的最大问题是,人们不会测试所有的分支机构。确保为每个可能的分支编写一个测试,无论您看起来多么不可能命中它。

        6
  •  2
  •   Steve Melnikoff    17 年前

    你也可以试试 Karnaugh maps ,最多可容纳4个变量。

        7
  •  1
  •   Jason Baker    17 年前

    如果你还没有,我强烈建议你阅读 Code Complete . 它对这样的主题有很多建议。我现在手头没有我的副本,否则我会把这一部分的摘要写在书上。

        8
  •  0
  •   workmad3    17 年前

    将逻辑分解为独立的单元(A&B等),每个单元都有自己的变量。然后使用您需要的逻辑构建这些。用适当的名称命名每个变量,这样您的复杂语句就相当可读(尽管它可能会占用多行额外的行和一些临时变量)。

        9
  •  0
  •   Ty.    17 年前

    你为什么不能用guard语句来处理逻辑呢?

        10
  •  0
  •   Mr Fooz    17 年前

    Karnaugh maps 可以是从真值表(由visage建议)中获取信息并将其转换为紧凑的和/或/或非表达式的好方法。这些通常在EE数字逻辑课程中教授。

        11
  •  0
  •   Matt Lehmann    16 年前

    你试过设计图案吗?您可以研究所谓的战略模式: http://en.wikipedia.org/wiki/Strategy_pattern

        12
  •  0
  •   Pete    14 年前

    查看核选项: Drools .有很多事情要做——我花了一两天的时间来阅读这些文献,只是为了掌握它的能力。但是,如果您的应用程序中复杂的if-then逻辑是项目的一个不断发展的部分(例如,一个使用模块化算法的应用程序),那么它可能就是问题所在。

    推荐文章