【问题标题】:Refactor to avoid using for...next more than once重构以避免多次使用 for...next
【发布时间】:2015-04-12 16:15:22
【问题描述】:

我有这个:

For k = 1 to 100
    Statement 1
Next

For j = 1 to 100
    Statement 2
Next

For l = 1 to 100
    Statement 3
Next

我想把所有三个语句放在一个单独的 For...Next

For k = 1 to 100
    Statement 1
    Statement 2
    Statement 3
Next

但是我不能,因为循环需要为每个语句按顺序运行(语句 1 需要首先为从 1 到 100 的所有值运行,然后是相同的,但对于语句 2 等...) .有没有办法简化这个?我相信一定有。谢谢!

【问题讨论】:

  • 我拒绝这个问题的前提。您的第一个代码 sn-p 是正确的方法。您不想压缩它。节省 2 小行代码并不是让事情变得更复杂、更不可读的好理由。注意经验丰富的程序员给你的建议,在这里和你接受的答案中。 (顺便说一下,您可以对所有三个循环使用相同的计数器 k。)

标签: vba loops for-loop refactoring


【解决方案1】:

我拒绝这个问题的主旨。

您的第一个代码 sn-p 比将所有内容硬塞到一个 For...Next 循环中强制输入奇怪的条件要好得多。这会使事情变得更复杂,可读性更差,节省几行可怜的代码并不是这样做的好借口。

更明确地回答您的问题:有没有办法简化这个问题?

在一个层面上,几乎没有,因为您展示的代码非常简单。

但在一般情况下,任何复杂性都应分解为更小的部分,即程序。简化代码的唯一干净方法是将循环打包到子过程中,以简化高级过程。

例如,您的高级过程如下所示:

Dim n As Long
n = 100
DoThing1 n
DoThing2 n
DoThing3 n

使用低级程序:

Sub DoThing1(ByVal n As Long)
    Dim i As Long
    For i = 1 To n
        Statement1
    Next i
End Sub

其他两个类似。

【讨论】:

    【解决方案2】:
    For n=1 to 3
    For k = 1 to 100
        If n=1 Then Statement 1
        If n=2 Then Statement 2
        If n=3 Then Statement 3
    Next
    Next
    

    但实际上,您的第一个示例更简洁,将所有语句放在一个循环中根本不是简单的事情......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2019-06-06
      相关资源
      最近更新 更多