× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



> But then, I would have thought there was a (limited) way of overloading
> in RPG: using *OMIT and *NOPASS on the prototype and checking with
> %PARMS and the inbound CEE-API's within the procedure.

I had been trying to avoid getting involved in this discussion, but I
think (based on what I've seen posted here so far) that many people are
confused about what overloading is, exactly.

I've already stated my opinion on overloading in a past discussion (a
month or so ago) and I do not want to bring that up again.  All I intend
to do here is explain WHAT overloading is.

*OMIT and *NOPASS aren't really the same thing.  The *OMIT and *NOPASS
abilities allow a parameter to be optional.   Whereas, overloading really
doesn't have any effect on how parameters work -- it just changes the
way procedures are looked up.

I'll elaborate.

When you do a "callp myprocname()" the system looks up the procedure
called "myprocname" finds out where it resides in memory, and then runs
the code in that location.

The thing that overloading changes is how it looks up "myprocname."
Instead of just finding a procedure with the NAME "myprocname" it
looks for a procedure called "myprocname" with the same parameter types
that you've specified on the call.

Because the parameter list is also used during this lookup (instead of
just the procedure's name) you can have multiple procedures all with the
same name, as long as they have different parameter lists.

It doesn't change anything else.   If you want to have a getMonthName
that returns teh month name from a date field, as well as a getMonthName
that returns the month name from an integer, you still have to write
two procedures.   You still have to define two prototypes and two
parameter lists, and write two sections of code.

The only thing that it changes is that both procedures can now have the
same name.   If we do not have overloading support, you'd have to call
them "getMonthNameFromDate" and "getMonthNameFromInt" because the names
have to be unique.

So when Joel says:
     monthname = getMonthName(datefield);
and
     monthname = getMonthName(intfield);

he's NOT calling one procedure that can handle either a date or an int.
He's calling two different procedures that happen to have the same name.

I hope that helps...

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.