4.3 while 语句——让反复执行的 if 语句更简洁
下面我们来考察一下 while 语句。while 语句是指满足条件时反复执行某区间中的代码 8。
8严格来讲,这只是在 while 语句后存在多行代码的情况。有时候 while 语句后面也可能只有单行代码。
使用 while 语句的表达方式
首先,我们来看一段使用了 while 语句的代码,它表示只要满足条件 x>0,就会反复执行打印显示 x 并减 1 的操作。
C语言
void use_while(int x){
printf("use_while\n");
while(x > 0){
printf("%d\n", x);
x—;
}
}
不使用 while 语句的表达方式
要达到同样的目的,不使用 while 语句可以实现吗?答案是肯定的。赶紧来看看下面的代码吧,它表示的是条件不满足时跳转至 END_LOOP,然后打印显示 x 并减 1,再跳转回条件判断语句前。
C语言
void not_use_while(int x){
printf("not_use_while\n");
START_LOOP:
if(!(x > 0)) goto END_LOOP;
printf("%d\n", x);
x—;
goto START_LOOP;
END_LOOP:
return;
}
很多语言定义了用于中断循环的 break 语句,执行 break 语句后立刻从循环中跳出。这个动作和 goto END_LOOP 是一样的。
像这样,while 语句和 break 语句做的只是那些只要有 goto 语句就能做的事情。while 语句带来的附加值不是新的功能,而是程序的易读性和易写性。
goto 语句是很强大也很容易理解的概念,但是过于原始。如果随意使用 goto 语句,程序将彻底散了架。再好的马,不配上缰绳也不能为人们所用,goto 语句的使用也需要加以限制,这样才便于代码的理解。if…else、while、break,这些就是加以限制了的 goto 语句 9。
9参见艾兹格·迪科斯彻“go to statement considered harmful”, Communications of the ACM, Vol.11, No.3, ACM, 1968, p.3。
