Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion aufrufen, innherhalb nochmal aufrufen - Rest? (https://www.delphipraxis.net/87655-funktion-aufrufen-innherhalb-nochmal-aufrufen-rest.html)

zecke 3. Mär 2007 21:37


Funktion aufrufen, innherhalb nochmal aufrufen - Rest?
 
:hi:

Wiedermal ein komischer Titel, aber wie so oft fällts mir nicht besser ein :mrgreen:

Ich habe eine Funktion. In dieser Funktion ist ungefähr in der Mitte unter einer Bedingung ein Aufruf genau dieser Funktion. Was passiert mit dem Rest der Funktion, der nach dem Aufruf kommt? Wird der 'Rest-Code' trotzdem noch ausgeführt oder springt man sozusagen mit dem Aufruf der Funktion, aus der Funktion raus (Neustart der Funktion)?

Um das Wirr-Warr zu verdeutlichen ein Code-Beispiel:
Delphi-Quellcode:
// etc

var bla,blubb : boolean;         // global

// etc

function popohaue():integer;
begin

  if bla=blubb then begin
    popohaue();
  end;

  showmessage('wuppdi');
  blubb:=false;

end;


procedure Button1.Click(Sender: TObject);
begin
bla:=true;
blubb:=true;
popohaue();
Würde das Showmessage noch ausgeführt werden, auch wenn die Funktion schon erneut aufgerufen wurde?

Beim Testen kratzte TurboDelphi ab, von daher vermute ich, dass es so nicht funktioniert :mrgreen:

Würde also bedeuten, dass die Funktion unendlich läuft, weil die Bedingung zutrifft und den 'Rest-Code' ignoriert. Stimmt diese Annahme oder gibt es etwas Anderes zu beachten, das ich übersehen habe?

mkinzler 3. Mär 2007 21:40

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?
 
Nach Beenden der 2. Prozedur/Funktion wird die 1. fortgesetzt.
Sind beide die Selbe redet man von Rekursion.

Christian Seehase 3. Mär 2007 21:43

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?
 
Moin Zecke,

Endlosrekursionen scheinen ja im Moment sehr "In" zu sein ;-)

Ohne Abbruchbedingung, ruft sich die Funktion immer wieder selber auf, bis der Stack überläuft => Exception.

Der Teil nach dem erneuten Aufruf der Funktion wird erst dann abgearbeitet, nachdem der Aufruf zurückkehrt, was in Deinem Falle allerdings nicht passiert.
Beispiele für Rekursionen (die funktionieren :mrgreen:) findest Du hier, wenn Du, z.B., mal nach Hier im Forum suchenFindFirst suchst, denn ein "klassischer" Anwendungsfall ist es, sich durch die Verzeichnisstruktur zu arbeiten.

zecke 3. Mär 2007 21:50

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?
 
Danke euch Beiden schon mal :)

Das heißt, die Funktion popohaue() würde erst nach der Bedingung weiterlaufen, wenn innerhalb der Bedingung ein Abbruchkriterium ist!?

Das heißt, ich komme gar nicht erst zu dem Abbruchkriterium weiter unten innerhalb popohaue(), weil die Funktion erneut aufgerufen wurde (in der Bedingung). Ich führe also die Funktion immer weiter aus, bis es anfängt zu rauchen? :mrgreen:

ps: Jetzt habe ich glaube ich auch mkinzler's Beitrag verstanden :D

Christian Seehase 3. Mär 2007 22:06

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?
 
Moin Zecke,

die Abbruchbedinung musst Du, logischer Weise, vor dem erneuten Aufruf der Funktion testen.

zecke 3. Mär 2007 22:08

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?
 
Ja, danke. Das hatte ich gemeint und kryptisch ausgedrückt :D

:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz