Funktionsvereinbarung


Der Kopf einer Funktionsvereinbarung sieht in Modula fast genauso aus wie eine Prozedurvereinbarung:
PROCEDURE <Prozedurname> <Parameterangabe> : <Typ>;
das Funktionsresultat wird aus dem Rumpf, wo immer es berechnet wurde, durch eine Anweisung RETURN <Ausdruck> an den Aufrufer übergeben.

Es ist gute Praxis, bei Funktionsvereinbarungen nur  Wertparameter zu verwenden und auf Seiteneffekte  gänzlich zu verzichten!

Beispiel

Gesucht ist eine Funktion HexDigit, die zu einer gegebenen Zahl n mit 0 <= n < 16 die zugehörige HEX-Ziffer liefert; als Ziffern für 10 - 15 sollen die Großbuchstaben 'A' - 'F' verwendet werden. Dabei nutzen wir aus, daß im ASCII-Code (und in allen anderen uns bekannten Codierungen) die Ziffern '0' .. '9' und die Buchstaben 'A' .. 'F' jeweils unmittelbar hintereinander liegen. Zur Umwandlung zwischen den Datentypen CARDINAL und CHAR verwenden wir die Transfer-Funktionen ORD und CHR.
PROCEDURE HexDigit(n: CARDINAL): CHAR;
(* PRE n < 16 *)
BEGIN IF n < 10
      THEN RETURN CHR(ORD('0') + n)
      ELSE RETURN CHR(ORD('A') + n - 10)
      END
END HexDigit;

zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:36