if语句或for循环中的长代码块

Nie*_*Bom 1 formatting refactoring coding-style

这是关于编码风格的跨语言问题.

我必须使用很多代码,这些代码在if语句或for循环中有很长的代码块,有时有数百行.代码是程序性的.

代码如下

if(condition){
    //hundreds of lines of code
}else if{
    //hundreds of lines of code
} else {
    //hundreds of lines of code
}
Run Code Online (Sandbox Code Playgroud)

如果我有一段时间没有看到它,我在浏览这段代码时遇到了麻烦,因为我不得不来回滚动来检查我所处的语句的哪个分支,或者我是否在循环中,或循环迭代器是什么叫做.

我的预感是将一长串代码放在函数中,并在语句的分支内或循环内调用它们,因此循环和树如果更短,因此更具可读性.我创建的函数是合理的代码 - 孤岛,而不仅仅是随意删除当前的代码.

但是,这是我的问题:这是一个好主意吗?或者在if语句或for循环中包含数百行代码并不是一种糟糕的编码风格?我不是一个真正有经验的程序员,但我很欣赏干净的代码:)

谢谢!

补充:数百行代码在大多数情况下都不重复.我理解并尝试坚持DRY原则.

Chr*_*isF 11

能够在一个屏幕上看到整个方法通常是个好主意.如果你必须向上和向下滚动太多(有些人会争论)那么你就有可能丢失信息.

所以一般来说你提出的建议是个好主意.虽然您不需要将所有代码放在一个分支中的一个方法中.可能会有重复的代码段,因此您可以将其分解如下:

if(condition){
    CommonMethod();
    SpecificMethodA();
}else if{
    CommonMethod();
    SpecificMethodB();
} else {
    CommonMethod();
    SpecificMethodC();
}
Run Code Online (Sandbox Code Playgroud)

举个例子.虽然重构的确切性质完全取决于您的代码.


Luc*_*ero 5

根据你的说法,我将这些块的内容重构为单独的过程(根据需要给它们提供有用的名称和传递参数).

if(condition){
    DoA();
}else if{
    DoB();
} else {
    DoC();
}

procedure DoA() {
    //hundreds of lines of code
}

procedure DoB() {
    //hundreds of lines of code
}

procedure DoC() {
    //hundreds of lines of code
}
Run Code Online (Sandbox Code Playgroud)

当然,在DoX程序中也可以这样做.