【问题标题】:Final/const keyword equivalent in Progress-4GLProgress-4GL 中的 final/const 关键字等效项
【发布时间】:2011-07-24 18:10:17
【问题描述】:

如果我在 Java 中有一个包含不可变成员的类,我会这样做:

class MyClass {
    private final String name;
    private final int id;
    myClass(String name, int id) {
        this.name = name;
        this.id = id;
    }
    String getName() { return name; }
    int getId() { return id; }
}

在 Progress-4GL 中,您通常会看到类似这样的内容:(请不要讲匈牙利符号。我也讨厌它,但它在 Progress 社区中很常见,所以我只能忍受。)

CLASS MyClass :

    DEFINE VARIABLE mcName as CHARACTER NO-UNDO.
    DEFINE VARIABLE miId   as INTEGER   NO-UNDO.

    CONSTRUCTOR PUBLIC MyClass(INPUT ipcName AS CHARACTER,
                               INPUT ipiId AS INTEGER):
        ASSIGN mcName = ipcName
               miId   = ipiID.
    END. /* constructor(char,int)*/
END CLASS. /* MyClass */

有人告诉我,在 Progress 10.2B 中,他们添加了创建常量/最终变量的能力。但是,我无法在任何地方找到对它的任何引用。在我的 Architect(10.2A 版)中,我确实看到 FINAL 被视为关键字。但它背后的文档让我无法理解。

如果您曾经尝试搜索 Progress 文档,您就会知道我的困境。

如何在 Progress 10.2B 中实现不可变变量?有什么我需要注意的问题吗?

谢谢!

EDIT 1 我在FINAL 上找到了文档。它似乎只适用于类和方法。我目前的做法是

CLASS ImmutableString :
    DEFINE PRIVATE VARIABLE mcValue AS CHARACTER NO-UNDO.

    CONSTRUCTOR PUBLIC ImmutableString(INPUT ipcValue AS CHARACTER) :
        ASSIGN mcValue = ipcValue.
    END.

    METHOD PUBLIC CHARACTER getValue() :
        RETURN mcValue. /* Is a defensive copy required? */
    END METHOD.
END CLASS.

【问题讨论】:

    标签: final progress-4gl openedge


    【解决方案1】:

    您还可以使用公共“GET”和私有“SET”创建公共属性:

       DEF PUBLIC PROPERTY Value AS CHAR NO-UNDO
          GET.
          PRIVATE SET.
    
       CONSTRUCTOR PUBLIC ImmutableString(INPUT ipcValue AS CHARACTER) :
           Value = ipcValue.
       END.
    

    这样的代码少了一点,而且做的事情是一样的。

    已编辑更改属性名称以匹配原始海报的示例。

    【讨论】:

    • 有了这个糖,你将如何访问这个值?我需要打电话给myStr:getValue()myStr:mcName吗?
    • myStr:Value 请注意,我将示例中的属性名称从“名称”更改为“值”。
    • 原则上我喜欢它。但是,我的公司对 Hungarian Notation 非常执着,这意味着符号会溢出到函数名称中。一个不幸的后果。 :-(
    • 我一直在纠结是否应该接受这个答案。这不会成为我正在做的事情的解决方案,但我认为如果我不受这与 Hungarian Notion 交互方式的丑陋的限制,这就是我会做的事情。所以我决定继续接受它,因为它可以解决我的问题。
    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多