[comp.lang.modula2] Good Modula Style

VOSSLOH@DB0TUI11.BITNET (Klaus Vossloh) (11/16/87)

MODULE LAYOUT;

(*---------------------------------------------*)
(* We made good experiences with the following *)
(* layout in combination with                  *)
(* grouping related objects and algorithm.     *)
(* The layout is not very compact  but seems to*)
(* be readable.                                *)
(*---------------------------------------------*)

FROM PCIO IMPORT
  Con, WriteString;

CONST
  Co1 = 12;
  Co2 = 17;

TYPE
  Ty1 = (El1, El2);
  Ty2 = (El3, El4);

VAR
  Va1 : Ty1;
  Va2 : Ty2;

PROCEDURE Pr1(Pa1 : Ty1; Pa2 : Ty2);

  CONST
    Co3 = 24;
    Co4 = 37;

  TYPE
    Ty3 = (El5, El6);
    Ty4 = (El7, El8);

  VAR
    Va3 : Ty3;
    Va4 : Ty4;

  PROCEDURE Pr2(Pa3 : Ty3; Pa4 : Ty4);

    CONST
      Co5 = 98;
      Co6 = 45;

    TYPE
      Ty5 = (El9, El10);
      Ty6 = (El11, El12);

    VAR
      Va5 : Ty5;
      Va6 : Ty6;
      Va7 : ARRAY [1..4711] OF REAL;

    PROCEDURE Pr3(Pa5 : Ty5; Pa6 : Ty6);
      VAR I, J : CARDINAL;
    BEGIN (* Pr3 *)
      FOR I:=1 TO 12 BY 2 DO
        REPEAT
          WHILE FALSE DO
            IF TRUE THEN
              J := I + 1
            ELSIF NOT TRUE THEN
              J := I - 1;
              RETURN
            ELSE
              WriteString(Con, "Aha.$");
              Va7[13] := 1.0
            END (* If *)
          END (* While *);
          Pr1(Va1, Va2)
        UNTIL TRUE
      END (* For *)
    END Pr3;

  BEGIN (* Pr2 *)
  END Pr2;

BEGIN (* Pr1 *)
END Pr1;

BEGIN (* LAYOUT *)
END LAYOUT.

hal@pur-phy (Hal Chambers) (11/17/87)

In article <INFO-M2%87111613494632@DB0TUI11> Info-Modula2 Distribution List <INFO-M2%UCF1VM.bitnet@jade.berkeley.edu> writes:

>            IF TRUE THEN
>              J := I + 1
>            ELSIF NOT TRUE THEN
>              J := I - 1;
	   .....

I would also recommend using semicolon as a statement terminator rather
than a separator.  Modula-2 specifically allows the extra semicolon
so that this may be done.

            IF TRUE THEN
              J := I + 1;
            ELSIF NOT TRUE THEN
              J := I - 1;
	   .....

Although it isn't syntactically required, it results in a more uniform
appearance to the code.  Also, if a substantial block of code follows
the IF and you latter add more statments to the block, it is easy to
miss the omitted semicolon when the J:=I+1 is no longer the last
statment of the block.

Admittedly this is a matter of style (read: personal preference) and
I do not claim that the form omitting the semicolon is in any sense
"ugly" or anything like that.

Hal Chambers