Homepage Jasocul

FAQ (Frequently Asked Questions):
Alles, was immer wieder mal gefragt wird

Ich sammel gerade alle typischen Fragen, die immer wieder mal auftauchen.Die Seite wird dann immer wieder aktualisiert. Wenn möglich werden zu den Antworten auch Source-Beispiele zur Verfügung gestellt.

Der FAQ-Bereich steht aber noch ganz am Anfang.

Für Vorschläge kann das Feedback-Formular verwendet werden.

Unterschied zwischen Procedure und Function

Unterschied zwischen Procedure und Function

Zunächst mal sieht beides scheinbar gleich aus. Beiden Konstrukte benötigen einen Namen und können Parameter haben.
Bei der Function kommt aber noch etwas hinzu: Sie bekommt einen Typ zugewiesen. Genau wie bei einer Variablen.

Vergleichen wir:
procedure Machmal_aus_dem_String_eine_Zahl(s:String);
function Machmal_aus_dem_String_eine_Zahl(s:String):Integer;

In der Procedure würde jetzt etwas ablaufen, was aus dem String eine Zahl macht. Wie das geht, ist zunächst mal uninteressant. Aber was dann? Wie kommen wir an die Zahl heran?
Mit einer Procedure ginge das nur, indem man eine globale Variable definiert, die dann die Zahl aufnehmen kann. In größeren Programmen wird es dann schnell unübersichtlich. Wer weiß dann schon noch wo man welche globale Variable verwendet hat. Es gibt auch noch eine andere Möglichkeit, indem man dem Parameter das Schlüsselwort “Var” voranstellt:
procedure Machmal_aus_dem_String_eine_Zahl(var s:String);
Dann kann die Variable, die man dort übergeben hat, in der Procedure verändert werden. Dieser Veränderungen werden dann auch zurück gegeben.
Nachteil: Man kann keine Konstante übergeben. Es ist auch nicht immer gewünscht, dass die übergebene Variable verändert wird.

Bei einer Function läuft das anders. Innerhalb einer Function gibt es eine Variable “Result”. Die muss nicht definiert werden, die ist enfach da. Klingt komisch, ist aber so.
In der Function wird der String umgewandelt und das Ergebnis der Variablen “Result” zugewiesen.
Dadurch kann man irgendwo im Source eine Function wie folgt aufrufen:
MeineZahl := Machmal_aus_dem_String_eine_Zahl(‘123’);
MeineZahl kann dabei durchaus ein lokale Variable vom Typ Integer sein. Auch in Bedingungen (if) oder Schleifen (while..do, repeat..until, for..do) kann eine Function zur Prüfung der Schleifenbedingung verwendet werden. Mit einer Procedure wäre das viel zu umständlich.

[Startseite] [Wichtige Links] [Tutorials] [Downloads] [FAQ] [Buchvorstellung]

[Haftung] [Datenschutz] [Impressum] [Gästebuch] [Chat]