VB是如何.Net计算FOR..NEXT循环的结束测试



我正在教学生关于VB中的FOR NEXT循环。Net和我似乎背负着很久以前学习汇编语言的理解。尝试在几种情况下计算一行代码将执行的迭代次数:

FOR x = 1 TO 1  (implied STEP 1)  
  (body)  
NEXT x  

应该做1个循环,对吗?但是我把测试读成"直到x等于1",所以在第一个循环之后,x变成了2,测试不应该工作。
那么:FOR x = 1 TO 1 STEP -1呢?你的答案是一样的吗?
那么:FOR x = 1 TO 0 (implied STEP 1)呢?函数体不应该执行。但测试是"直到x = 0",所以它应该导致一个无限循环,当x从0攀升…开始看到问题了吗?
那么:FOR x = 1 TO 0 STEP -1呢?现在它会做两次身体,对吧?但这一点的x是多少?1。测试是如何停止的,当它超过了它所说的停止值?
我猜编译器实际上是测试until x = (endval) + stepval。我可以在汇编中看到这一点,但除此之外,我承认我无法看到或向我的学生解释这一切实际上是如何按照假定的"应该"方式工作的。(对于像"1"这样的常量,这个问题似乎微不足道,但想象一下变量或其他创建FOR循环参数的方式。)有人能告诉我吗?谢谢你。

似乎Tony Hinkle提供了答案,但他是作为评论提供的。所以我提供了他在这里提到的特定文本作为答案:

"When a For…Next循环开始,Visual Basic计算start、end和step。Visual Basic只在此时计算这些值,然后将start赋值给counter。在语句块运行之前,Visual Basic将counter与end进行比较。如果counter已经大于结束值(如果step为负则小于结束值),则For循环结束,并将控制传递给Next语句后面的语句。否则,语句块运行。

每次Visual Basic遇到Next语句时,它将计数器一步递增并返回到For语句。它再次将counter与end进行比较,并根据结果再次运行块或退出循环。此过程将继续进行,直到计数器通过end或遇到Exit For语句。

直到counter超过end,循环才会停止。如果counter等于end,循环继续。决定是否运行块的比较是:如果step为正,counter <= end;如果step为负,counter>= end。"

帮助澄清:

FOR x = 1 TO 1(隐含STEP 1)将循环1次。

FOR x = 1 TO 1 STEP -1将循环1次

FOR x = 1 TO 0(隐含的STEP 1)将永远不会循环,因为计数器已经超过了end。

FOR x = 1 TO 0 STEP -1将循环两次

最新更新