![]() |
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:
Würde das Showmessage noch ausgeführt werden, auch wenn die Funktion schon erneut aufgerufen wurde?
// 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(); 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? |
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. |
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 ![]() |
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 |
Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?
Moin Zecke,
die Abbruchbedinung musst Du, logischer Weise, vor dem erneuten Aufruf der Funktion testen. |
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 20:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz