AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Funktion aufrufen, innherhalb nochmal aufrufen - Rest?
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion aufrufen, innherhalb nochmal aufrufen - Rest?

Ein Thema von zecke · begonnen am 3. Mär 2007 · letzter Beitrag vom 3. Mär 2007
Antwort Antwort
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#1

Funktion aufrufen, innherhalb nochmal aufrufen - Rest?

  Alt 3. Mär 2007, 21:37


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

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

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?
mfg zecke
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?

  Alt 3. Mär 2007, 21:40
Nach Beenden der 2. Prozedur/Funktion wird die 1. fortgesetzt.
Sind beide die Selbe redet man von Rekursion.
Markus Kinzler
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?

  Alt 3. Mär 2007, 21:43
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 ) 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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?

  Alt 3. Mär 2007, 21:50
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?

ps: Jetzt habe ich glaube ich auch mkinzler's Beitrag verstanden
mfg zecke
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?

  Alt 3. Mär 2007, 22:06
Moin Zecke,

die Abbruchbedinung musst Du, logischer Weise, vor dem erneuten Aufruf der Funktion testen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Funktion aufrufen, innherhalb nochmal aufrufen - Rest?

  Alt 3. Mär 2007, 22:08
Ja, danke. Das hatte ich gemeint und kryptisch ausgedrückt

mfg zecke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 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