我们正在迁移到11.6,我认为这是重新思考旧习惯和改进一些概念的好时机。
其中一个是我们在函数和过程中处理参数定义的方式。
我们经常会有需要大量参数的程序和功能,无论是输入还是输出。就个人而言,出于可读性和可维护性的原因,我不喜欢有明确声明过多参数的方法。
为了避免这个问题并且仍然允许大量参数,我们手动实现了一个带有单个参数的键值对方法。
但这种方法存在一些缺点:
所以说,我想听听别人的想法。 你有没有实现类似的东西?
ABL中是否可以作为javascript / json对象使用?
当前实施。
DEFINE VARIABLE param as CHARACTER NO-UNDO.
addValue('id', '1', param).
addValue('date', STRING(TODAY), param).
RUN internalProc (INPUT param).
所需的实施
param.id = 1
param.date = TODAY
RUN internalProc (INPUT param)
答案 0 :(得分:3)
由于您提到11.6,为什么不使用基于真实类的对象(自10.1A起可用)。
yourpackage \ yourparameter.cls:
CLASS yourpackage.yourclass:
DEFINE PUBLIC PROPERTY date AS DATE NO-UNDO
GET.
SET.
DEFINE PUBLIC PROPERTY id AS INTEGER NO-UNDO
GET.
SET.
CONSTRUCTOR PUBLIC yourclass ():
SUPER ().
END CONSTRUCTOR.
CONSTRUCTOR PUBLIC yourclass (pid AS INTEGER, pdate AS DATE):
SUPER ().
ASSIGN THIS-OBJECT:id = pid
THIS-OBJECT:date = DATE .
END CONSTRUCTOR.
END CLASS.
和内部程序:
DEFINE INPUT PARAMETER poParameter AS yourpackage.yourclass NO-UNDO .
和来电者:
DEFINE VARIABLE o AS yourpackage.yourclass NO-UNDO.
o = NEW yourpackage.yourclass().
o:id = 42.
o:date = TODAY.
RUN internalProc (o) .
替代来电者:
RUN internalProc (NEW yourpackage.yourclass (1, TODAY)) .
ABL提供10.1A的完整OO功能,可以与程序代码很好地混合。参数对象(结构)是在遗留代码中开始使用一些初级类的好方法。