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()
}