【问题标题】:Difference between the internal procedures and functions in Progress4gl?Progress 4gl内部程序和函数的区别?
【发布时间】:2021-02-20 12:50:18
【问题描述】:

内部过程和函数都接受参数以提供输出。那么使用内部过程而不是函数有什么用呢。

【问题讨论】:

    标签: openedge progress-4gl


    【解决方案1】:

    当您想要执行一些计算并返回单个值时,使用用户定义的函数。在这方面,它与内置 ABL 函数相同,如 SUBSTRING 或 EXP 函数。将此计算代码放在 FUNCTION 块中,而不是在代码中内联,这样您就可以将它放在一个地方并多次引用它,而不会重复代码。

    内部过程也是一段封装的代码,可以完成一些工作,但它更通用。虽然函数必须返回单个值,但内部过程可能有也可能没有输入参数或输出参数。

    https://docs.progress.com/category/openedge-archives

    【讨论】:

    • 好吧,奇怪的是函数也可以有 OUTPUT 参数。
    • 当您的典型用例是将函数调用嵌入到使用返回值的其他语句中时,函数是最合适的。例如:s2 = substring(s1, firstSpace(s1))。其中 firstSpace() 是一个用户定义的函数,它返回字符串中第一个空格字符的偏移量。过程必须是 RUN - 所以你不能将它们嵌入到其他语句中。而且如果你有多个返回值或输出参数,程序通常更合乎逻辑和明智。
    【解决方案2】:

    此外,函数(如方法)的参数和返回值类型会在编译时进行检查,从而消除稍后运行时的一些潜在问题。

    【讨论】:

      【解决方案3】:

      该问题承认函数和内部过程都允许输出参数,并询问内部过程而不是函数的“用途”。

      对我来说,这意味着发帖者一直在考虑使用函数并弃用内部程序,并在问:“如果我这样做会失去什么?”

      想到两件事:

      1. 有点与 Jean-Christophe Cardot 的观点相反:您将失去一些关于参数列表的自动类型转换和语法灵活性。有些人从消极的角度看待这种灵活性。其他人认为这是积极的。

      2. 您需要“前向声明”您的函数或使用动态调用。使用内部过程,您无需在代码前面提供声明即可运行它。

      如果您倾向于认为严格的类型检查很有用,那么这些可能并不是您认为丢失的好处。如果您更喜欢更灵活的行为,那么您可能会后悔选择函数而不是内部程序。

      【讨论】:

      • 您也将失去仅使用函数时返回错误的选项。 (至少对于经典的错误处理,我不确定更现代的 throw/catch 异常处理。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多