如果找不到匹配项,则返回默认值

Jak*_*ers 1 progress-4gl openedge

我有一个函数Ge​​tQuantity返回一个小数。在某些情况下,我不返回任何内容,即返回空字符串,以便显示“”。

实际行为:

  1. GetQuantity(1)-> 1.0
  2. GetQuantity(2)-> 2.0
  3. GetQuantity(3)-> 3.3

所需行为:

  1. GetQuantity(1)-> 1.0
  2. GetQuantity(2)-> 2.0
  3. GetQuantity(3)->''

在情况3中,我显然可以返回-1.0或其他值,但这不是我所需要的。

FUNCTION GetQuantity RETURNS DECIMAL(INPUT num  AS INTEGER):
    DEFINE VARIABLE quantity AS DECIMAL NO-UNDO FORMAT "->,>>>,>>9.9<<<<<<<<".

    quantity = 3.3. //initialization is neccessary as IRL my value is initialized

    IF num = 1 THEN DO:
        RETURN 1.0.
    END.

    ELSE IF num = 2 THEN DO:
        RETURN 2.0.
    END.

    RETURN quantity. //base case return ' '
END.

DISPLAY GetQuantity(3)
Run Code Online (Sandbox Code Playgroud)

Mik*_*ner 5

一种方法是返回?如果是默认值,请在输出例程中进行处理。

作为?也是计算失败的结果(除以0),这可能很危险。

另一种选择是编写一个具有Value属性和Default标志以及ToString()覆盖的类。

BLOCK-LEVEL ON ERROR UNDO, THROW.

USING Progress.Lang.*.

CLASS Test.SampleValueHolder: 

    DEFINE PUBLIC PROPERTY Value AS DECIMAL NO-UNDO
    GET.
    PRIVATE SET.

    DEFINE PUBLIC PROPERTY IsDefault AS LOGICAL NO-UNDO
    GET.
    PRIVATE SET.

    CONSTRUCTOR PUBLIC SampleValueHolder (pdeValue AS DECIMAL, 
                                          plDefault AS LOGICAL):

        ASSIGN THIS-OBJECT:Value     = pdeValue 
               THIS-OBJECT:IsDefault = plDefault .                                          

    END CONSTRUCTOR.

    METHOD PUBLIC OVERRIDE CHARACTER ToString ():

        IF THIS-OBJECT:IsDefault THEN 
            RETURN "" .
        ELSE 
            RETURN STRING (THIS-OBJECT:Value, "->,>>>,>>9.9<<<<<<<<") .

    END METHOD.

END CLASS.
Run Code Online (Sandbox Code Playgroud)

现在您可以将RETURN NEW SampleValueHolder(1.0,FALSE)或RETURN NEW SampleValueHolder(?,TRUE)转换为类型Test.SampleValueHolder的变量。

每当显示该值的STRING()时,您都将获得格式化值或默认值“”。