I like the Select statement, but I find RPG's select to be a bit anemic when compared to PL/I's select
construct where you can put an expression at the select level or the when level. It's been a while so
the syntax is probably not exact, but something like this is valid:
Select (a+b);
When (1);
Do something;
When (2);
Do something else;
When (c+d);
Do something else;
Otherwise;
Some default action;
End;
No breaks required.
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Joe Pluta
Sent: Monday, June 23, 2008 12:23 PM
To: RPG programming on the AS400 / iSeries
Subject: Re: Advantages of RPG
Doug Palme wrote:
your statement of "perhaps the best
implementation ever..." are you referring to the SELECT statement
specifically or the group as a whole? The reason I ask is that
SELECT-ENDSL is the same as SELECT CASE-END SELECT is it not?
If I am off the mark on this, please feel free to correct me.
Not a correction so much as a clarification. Most implementation of
CASE logic have actually been variations on the SWITCH statement. The
concept of a switch is that you have a single variable, and then you
execute logic based on the contents of that variable.
switch (a) {
case 1: doSomething1();
break;
case 2: doSomething2();
break;
default;
doSomethingElse();
}
SELECT on the other hand was much more a derivation of the old CASE
construct in RPG, where you could compare any two variables. And in
RPG, a combination of SELECT and procedures is incredible:
SELECT;
// Opcodes 01 and 02 don't need authorization
WHEN OPCODE = '01';
DoOpcode1();
WHEN OPCODE = '02';
DoOpcode1();
// Opcode 10 needs authorization
WHEN not Authorized();
SendError('Not Authorized');
WHEN OPCODE = '10';
DoOpcode10();
// Bad opcode
OTHER;
SendError('Bad Opcode');
ENDSL;
The code above is just stunningly simple for client/server programming.
I used this all throughout the RSDC Scheduler application and I was able
to create new servers in minutes. The fact that the WHEN can be as
complex as you need it, or even execute a subprocedure (which in turn
could call another program!) makes this one of the very best opcodes
ever designed for procedural logic.
Joe