Language agnostic 在条件反射之前/之后构造

Language agnostic 在条件反射之前/之后构造,language-agnostic,structure,Language Agnostic,Structure,当我需要一个条件来确定执行语句之前还是之后的块时,这总是导致代码重复。我要么计算两次条件,要么重复代码块 即使这个块只是一个函数调用,它也不能增加可读性 if( condition ) { BLOCK-A } BLOCK-B if ( !condition ) { BLOCK-C } 或 有没有更清晰的方法来构造这样的代码?听起来BLOCK-B有两个类似的用途。考虑把它抽象到它自己的区域 function D { BLOCK-B } if( conditio

当我需要一个条件来确定执行语句之前还是之后的块时,这总是导致代码重复。我要么计算两次条件,要么重复代码块

即使这个块只是一个函数调用,它也不能增加可读性

if( condition ) {
    BLOCK-A
}

BLOCK-B

if ( !condition ) {
    BLOCK-C
}


有没有更清晰的方法来构造这样的代码?

听起来BLOCK-B有两个类似的用途。考虑把它抽象到它自己的区域

function D {
   BLOCK-B
   }


if( condition ) {
    BLOCK-A
    function D
} else {
    function D
    BLOCK-C
}

在您的选择中,我会这样做:

if( condition ) {
    BLOCK-A
    BLOCK-B
} else {
    BLOCK-B
    BLOCK-C
}
这将避免在问题中多次评估条件

然而,在理想情况下,我会尽量避免这种结构,因为它会将代码耦合起来,并且会使后续的更改变得困难。有人可以在B区改变某些东西,例如在一个地方,而不是在另一个地方。可能将
Block-B
移动到它自己的函数/方法等中是谨慎的

就我个人而言,我会这样做

function BlockB()
{
    //code from block b
}

function FirstCondition()
{
    //BLOCK-A code
    BlockB()
}

function SecondCondition()
{
    //BLOCK-C code
    BlockB()
}

if( condition ) {
    FirstCondition()
} else {
    SecondCondition()
}

正如我所提到的,即使块B是一个函数调用,它看起来也不是超级可读的。经过反思,我对它进行了编辑,使其符合我个人编写代码的方式。
function BlockB()
{
    //code from block b
}

function FirstCondition()
{
    //BLOCK-A code
    BlockB()
}

function SecondCondition()
{
    //BLOCK-C code
    BlockB()
}

if( condition ) {
    FirstCondition()
} else {
    SecondCondition()
}