refactoring - 将语句切换到while循环或while循环到case block ?

标签 refactoring while-loop switch-statement code-readability

我正在重构我编写的一些代码,我必须决定是要将 switch 语句放入 while 循环还是将 while 循环重复到每个 case block 中。这两种不同的方式类似于下面的伪代码:

选项 1)

while (cnt > 0) {
    switch (value) {
    case A:
        doSomething();
        break;
    case B:
        doSomethingElse();
        break;
    ...
    default:
        default();
        break;
    }
    cnt--;
}

选项 2)

switch (value) {
case A:
     while( cnt > 0){
        doSomething();
        cnt--;
      }
case B:
     while( cnt > 0){
        doSomethingElse();
        cnt--;
      }
...
default: 
     while( cnt > 0){
        default();
        cnt--;
      }
}

我认为第一个选项更好地遵循 DRY 原则,因为我不会每次都重复 while 和 cnt--。虽然我更喜欢第二种选择,因为一旦它在 switch 语句中选择了一个 case,它就会在 while 中开始循环,并且不再需要评估 switch 条件。

那么,您会选择这两种解决方案中的哪一种?为什么?

NB:我们可以假设 switch 条件(即下面代码中的变量“值”)在整个 while 循环中都没有改变,换句话说:操作 doSomething()、doSomethingElse() 等。不影响 switch 语句。

NB2:在我正在处理的实际代码中,while 循环可能非常庞大。 “Cnt”,对于某些测试用例,可以是 10^9 的数量级

最佳答案

在大多数情况下,Loop-switch sequence是一个反模式,为了清楚起见,你应该避免,因为你提到 cnt 也可以变得相当大,以提高性能。

关于refactoring - 将语句切换到while循环或while循环到case block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15860766/

相关文章:

java - Intellij 将私有(private)字段及其访问器方法移动/重构到不同的类

java - 你能在java中用一个变化的变量调用不同的方法吗?

c - if (variable) { while(variable){...} } 如何在 C 编程中工作?

java - 当计时器结束时,如何中断用于从套接字接收数据的 while 循环?

java - 切换字节中的十六进制符号

C#开关变量初始化: Why does this code NOT cause a compiler error or a runtime error?

c++ - 案例 "wrong list": what happens?

在 lisp 中重构 "show-list"函数

java - if 语句仅在我之前打印到终端时执行

java - 在方法中重构多个 if-else 条件