Using Generic Jade Dictionary Methods

Jade enables you to write generic dictionary methods that receive and pass on KeyType parameters in dictionary classes when no keys are defined. For example, Jade implements the Dictionary class includesKey method, which has a C++ implementation, as follows.

includesKey(keys: KeyType): Boolean;
begin
    return getAtKey(keys) <> null;
end;

When a Jade method with a KeyType formal parameter is compiled in a dictionary class in which no keys are defined, a variable key list is assumed.

The following is an example of a method that could be defined at the Dictionary class level. It takes a KeyType parameter, passes it on to another dictionary method, and performs some additional computation.

getAtKeyGeqOrLast(keys: KeyType): MemberType;
vars
    entry : MemberType;
begin
    entry := getAtKeyGeq(keys);
    if entry = null then
        // If not found, return the last entry in the dictionary
        entry := last;
    endif;
    return entry;
end;

Although this getAtKeyGeqOrLast method is a generic method defined in an abstract dictionary class that has no defined keys, it could be called using a reference to a dictionary type with defined keys. This enables the compiler to perform full type-checking on the keys.

In the following example, the CustomerByNameDict dictionary has a single string key. The actual parameter in the call in this example can be fully type-checked by the compiler.

vars
    customerDict : CustomerByNameDict;
    cust         : Customer;
begin
    ...
    cust := customerDict.getAtKeyGeqOrLast("Wallace");
    ...
end;

See also "Defining and Using External Dictionary Methods" and "Variable Parameter List Considerations", earlier in this chapter.