Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Delphi: was tut die funktion

PaoloP / 7 Antworten / Baumansicht Nickles

Hallo


ich stehe immer noch mit meinen bescheidenen C-Kentnissen vor einem Haufen Delphi-Code und bin dem scheinbar hilflos ausgeliefert irgendwie.
Was genau macht das exit ohne Semikolon da in Zeile 10 ? Die beiden if-prüfungen sorgen doch beide für das verlassen der funktion oder ? if-1 liefert true und if-2 liefert false denke ich ist das richtig? oder ist das exit als exit end zu lesen und bedeutet wieder was anderers? Verwirrung pur


1: function hatKeineTeiler:boolean;
2:        var j:integer;
3:begin
4:         result:=true; 
5:         for j:=1 to AnzahlDerPrimzahlenBisher do
6:         Begin
7:                 if groesstePZ<primzahlen[j]*primzahlen[j] then exit;


8:                 if groesstePZ=(GroesstePZ div primzahlen[j])*primzahlen[j] then
9:                 Begin
10:                   result:=false; exit
11:               End;
12:        End;
13:end;

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
T-Rex PaoloP „Delphi: was tut die funktion“
Optionen

Die Funktion testet eine Zahl, ob sie Teiler hat.

Wenn auf einen Befehl ein End folgt, muß dieser Befehl nicht mit einem Semikolon abgeschlossen werden. Man sollte es aber tun.

Deine Annahme zu den If-Blöcken ist korrekt.
Standardmäßig wird True zurückgegeben (result := true;). Der zweite If-Blcok ändert die Rückgabe auf False und verläßt die Funktion.

 GrüßeT-Rex 
bei Antwort benachrichtigen
PaoloP Nachtrag zu: „Delphi: was tut die funktion“
Optionen

Vielen Dank aber was ich net verstehe wieso das ohne Semikolon abgschlossen wird.

im 1. if block ist es "exit;" und im 2. if block streng genommen exit end; oder sehe ich was nicht richtig ? (ich hoffe das es so ist)

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
Andreas42 PaoloP „Danke aber“
Optionen

Hi!

Das ist nach Pascal-Syntax zulassig. Der letzte Befehl eines Blockes (und Begen/End bilden einen Block), muss nicht mit einem Semikolon abgeschlossen werden.

Das gilt auch für "Einbefehlblöcke" z.B. bei If abfragen (zu sehen bei proc1()):

(..)
if a=1 then
proc1()
else
proc2();
(..)

Das Semikolon schliesst die IF-Anweisung ab. Wäre das die letzte anweisung eines Blocken, dann könnte man darauf verzichten.

Bis denn
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
PaoloP Andreas42 „Danke aber“
Optionen

Dankeschön, gibt es einen Grund für diese Merkwürdigkeit?

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
Andreas42 PaoloP „Danke aber to andreas42“
Optionen

Hi!

Äh, sagen wir's mal so: als Nikolaus Wirth mich damals gefragt hat "Brauche ich das Ding wirklich nach jedem Befehl?".

Also, wenn's so gewesen wäre, ich meine - nicht wirklich, sondern theoretisch dann hätte man - falls man gewollt hätte - äh, wo war ich?

Platzsparen?

Kurz gesagt, darauf weiss wohl nur Herr Wirth eine Antwort.
;-)

OK, meine Interpretation:

Das Semikolon dient in Pascal (nur) dazu zwei Befehle zu trennen. Es ist die Endmarkierung eines Befehles wie in C. (Ist das in BASIC mit dem Doppelpunkt nicht genauso?)
Daher ist es auch am Ende eines Anweisungsblockes nicht nötig.

Bis denn
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Borlander Andreas42 „Danke aber to andreas42“
Optionen
Ist das in BASIC mit dem Doppelpunkt nicht genauso?
Genau, wird aber nur eingesetzt um mehrere Befehle in einer Zeile unter zu bringen.

CU Borlander
bei Antwort benachrichtigen
Borlander Andreas42 „Danke aber“
Optionen
Das gilt auch für "Einbefehlblöcke" z.B. bei If abfragen (zu sehen bei proc1()):
Das hier kein Semikolen benötigt wird, ja sogar verboten ist liegt an dem folgenden Else. Vor einem Else darf kein Semikolen verwendet werden, weil damit die If-Abfrage beendet wird.

CU Borlander
bei Antwort benachrichtigen