1700414468
作为计算机硬件上的行为,无论是条件分支还是循环都必须使用跳转指令来实现,但是在VBScript等高级语言中,可以用If-ElseIf-Else-End If程序块表示条件分支,用For-Next程序块表示循环。跳转指令因此变得可有可无了。但即便如此,在很多高级语言中,还是提供了与机器语言中跳转指令相当的语句,例如VBScript中的GoTo语句。其实戴克斯特拉想表达的是“既然好不容易使用上了高级语言,就别再使用相当于跳转指令的语句了。即便不使用跳转语句,程序的所有流程仍然可以表述出来”。他这样说是因为跳转指令所带来的危害性不小,会使程序陷入到流程错综复杂的状态,就像意大利面条那样缠绕在一起(如图4.11所示)
1700414469
1700414470
图4.11 跳转指令(GoTo语句)使程序陷入“意大利面条”的状态
1700414471
1700414472
1700414473
1700414474
1700414475
在程序设计的世界中,如果看到了以“结构化”开头的术语,就可以这样认为:程序的流程是由程序块表示的,而不是用GoTo语句等跳转指令实现的。例如,微软的.NET框架所提供的新版BASIC语言Visual Basic .NET中,就以增加新语法的方式加入了称为“结构化异常处理”的错误判断机制。这里据说的异常类似于错误
1700414476
1700414477
在旧版本的Visual Basic中,一旦发生了错误,程序的流程就会跳转到执行错误处理的地方。用程序块来表示这种错误处理方式的机制,就是结构化异常处理。在Visual Basic .NET中,用Try-Catch-EndTry程序块来表示结构化异常处理(如代码清单4.4所示)。但即便使用了结构化异常处理,在硬件上使用的也还是跳转指令,只是说在高级语言中不用再写相当于跳转指令的语句了。如果把用高级语言所编写的程序转换成机器语言,像结构化异常处理这样的语句还是会被转换为跳转指令
1700414478
1700414479
代码清单4.4 原始的错误处理机制和结构化异常处理的区别
1700414480
1700414481
(1)旧版本的Visual Basic用跳转指令(GoTo语句)实现错误处理
1700414482
1700414483
On Error GoTo ERR_HANDLER -使用了GoTo语句
1700414484
1700414485
‘做某些处理
1700414486
1700414487
…
1700414488
1700414489
‘处理错误的部分
1700414490
1700414492
1700414493
MsgBox “出错了!”
1700414494
1700414495
(2)Visual Basci .NET用程序块实现错误处理
1700414496
1700414497
Try
1700414498
1700414499
’做某些处理
1700414500
1700414501
…
1700414502
1700414503
Catch e As Exception
1700414504
1700414505
‘处理错误的部分(一旦发生了错误,流程就会跳转,这一点并没有改变。但现在这种流程是通过程序块表示,而不再使用GoTo语句)
1700414506
1700414507
MsgBox “出错了!”
1700414508
1700414509
End Try
1700414510
1700414511
1700414512
1700414513
1700414515
计算机是怎样跑起来的 4.5 画流程图来思考算法
1700414516
1700414517
为了充分体现流程图的用途,下面稍微涉及一些有关算法的内容。所谓算法(Algorithm)就是解决既定问题的步骤。想让计算机解决问题,就需要把问题的解法转换成程序的流程
[
上一页 ]
[ :1.700414468e+09 ]
[
下一页 ]