Ibm midrange RPGLE(As400)中GOTO和EXSR的重要区别是什么

Ibm midrange RPGLE(As400)中GOTO和EXSR的重要区别是什么,ibm-midrange,rpgle,Ibm Midrange,Rpgle,在RPGLE中GOTO和EXSR之间有什么重要的区别?这两种操作代码都会导致代码的执行跳转到过程中的不同点,但它们有一些区别GOTO是这两个命令中比较简单的一个,它是一个无条件跳转命令,本质上是“转到这里,开始执行那里的任何东西”。这是编程语言中最古老的命令之一,今天人们通常不赞成使用它。20世纪70年代“结构化编程”哲学的目标之一是用概念上更高的结构来取代GOTOs,这些结构可以更好地描述程序员的意图,并且通过阅读更容易理解程序员的意图。您可以找到列出的更换操作代码 EXSR是执行子例程的命令

在RPGLE中GOTO和EXSR之间有什么重要的区别?这两种操作代码都会导致代码的执行跳转到过程中的不同点,但它们有一些区别
GOTO
是这两个命令中比较简单的一个,它是一个无条件跳转命令,本质上是“转到这里,开始执行那里的任何东西”。这是编程语言中最古老的命令之一,今天人们通常不赞成使用它。20世纪70年代“结构化编程”哲学的目标之一是用概念上更高的结构来取代
GOTO
s,这些结构可以更好地描述程序员的意图,并且通过阅读更容易理解程序员的意图。您可以找到列出的更换操作代码

EXSR
是执行子例程的命令。虽然RPG没有将其列为结构化编程操作,但它旨在实现提高代码清晰度、减少错误和最小化代码重复的相同目标。它就像一个
GOTO
,您无条件跳转到一个新的代码段,但该代码段是您的过程或程序中的一个命名子例程。无论您只是想更清楚地命名代码段,还是想让一个段执行多次、从多个位置调用,或者是想利用相关的操作代码
LEAVESR
,这都很有用,这是一种在到达
ENDSR
并返回到
EXSR
之后刚刚执行的代码部分之前退出子例程的简单方法<代码>转到也可以这样做,方法是使用两个标签,用
标记
操作,但通常不太清晰,您必须维护一个标签列表,以清楚地了解您是如何跳转的

值得注意的是,结构化操作代码可以做的任何事情都可以由
GOTO
来完成,但这样编写代码并不是一个好主意。高级命令的发明是为了方便人们,而不是为了方便计算机。原则上,它们应该编译成非常相似的机器代码,但在记录程序员的思维过程和意图方面存在巨大的差异

还值得注意的是,RPG有两个不同级别的子例程,而大多数编程语言只有一个。子例程存在于过程或程序中,更类似于
GOTO
或结构化编程操作。它没有可以传递给它的参数或作用域为它的变量


过程更像是其他编程语言中的函数和子例程。它可以有局部范围的变量(很有用,这样你就不必记得手动清除它们),它可以是传递参数(很有用,这样你就不必在主程序中声明那么多临时变量),它可以返回一个值(变量或数据结构),这样你就可以将一个值传递回主程序。这些都使过程成为更灵活的选项,并促进更好的代码重用,但我发现调试它们有一些缺点。RPG调试工具(如
DUMP
操作)只有在过程中调用转储时才能正确显示变量值。这不适用于所有错误都由一个程序范围的
*PSSR
子例程收集的编码样式。您必须更多地使用
监视器
操作,或在每个过程中放置带有
转储的
*PSSR
。此外,与许多编程语言类似,RPG在调用堆栈中将错误传递给调用过程,但基本RPG语言并没有为代码提供内置工具来抛出错误,这对于过程有效地进行故障通信通常很有用。我使用了一个我从。如果您正确地应用这些技术,这些技术可以生成健壮的代码,但它确实使过程比子程序更难编写,特别是对于初学者或简单程序。我建议先掌握子程序和其他结构化编程结构,然后再进入过程。

这两种操作代码都会导致代码的执行跳转到过程中的不同点,但它们有一些区别
GOTO
是这两个命令中比较简单的一个,它是一个无条件跳转命令,本质上是“转到这里,开始执行那里的任何东西”。这是编程语言中最古老的命令之一,今天人们通常不赞成使用它。20世纪70年代“结构化编程”哲学的目标之一是用概念上更高的结构来取代
GOTO
s,这些结构可以更好地描述程序员的意图,并且通过阅读更容易理解程序员的意图。您可以找到列出的更换操作代码

EXSR
是执行子例程的命令。虽然RPG没有将其列为结构化编程操作,但它旨在实现提高代码清晰度、减少错误和最小化代码重复的相同目标。它就像一个
GOTO
,您无条件跳转到一个新的代码段,但该代码段是您的过程或程序中的一个命名子例程。无论您只是想更清楚地命名代码段,还是想让一个段执行多次、从多个位置调用,或者是想利用相关的操作代码
LEAVESR
,这都很有用,这是一种在到达
ENDSR
并返回到
EXSR
之后刚刚执行的代码部分之前退出子例程的简单方法<代码>转到