![]() |
For-Schleife als Template mit Prozedur als Parameter?
Ich weiß nicht wie ich das erklären soll. Ich habe das schon einmal gesehen weiß aber nicht wie es heißt und wie ich es finden kann.
Kann man den Schleifenkopf einer For-Schleife irgendwie als eine Art Template als Code festhalten und den Schleifeninhalt als Prozedur oder direkt Zeile für Zeile übergeben?
Delphi-Quellcode:
In obigen Falle (Beispiel) würde ich mir diese doppelte Schreibarbeit des Schleifenkopfes gerne ersparen und stattdessen so was hier schreiben
for i := 0 to 99 do
begin 1 2 3 end; for i := 0 to 99 do begin A B C end;
Delphi-Quellcode:
ForTemplate0To99.Do(
procedure begin A B C end); ); oder ForTemplate0To99.Do(MeineProcedur;); |
AW: For-Schleife als Template mit Prozedur als Parameter?
Ja, das geht über
![]() |
AW: For-Schleife als Template mit Prozedur als Parameter?
Sicherlich gibt es Möglichkeiten. Aber ob sich das Lohnt 3 Zeilen einer sehr verständlichen schleife durch sowas wie Methodenparameter und anonyme Methoden zu ersetzen lohnt?
Wenn es sich nicht nur im eine einfache Schleife sonder mehr handeln würde (Langläufer mit aktualisierung GUI und Abbrechbarkeit, dann ja. |
AW: For-Schleife als Template mit Prozedur als Parameter?
Zitat:
|
AW: For-Schleife als Template mit Prozedur als Parameter?
Zitat:
|
AW: For-Schleife als Template mit Prozedur als Parameter?
Unter Delphi 7 kann man das so machen:
Delphi-Quellcode:
Und das ist noch nichteinmal kryptisch.
Type
// Einen Typen festlegen, der den Aufrufparametern der zu "verschleifenden" Funktionen entspricht. tFormel = function(a : Integer; b : Integer) : LongInt; // Proceduren würden auch gehen. tProzeduren = Procedure(a : Integer; b : Integer); function EineFormel(a : Integer; b : Integer) : LongInt; begin Result := a * b; end; function NochEineFormel(a : Integer; b : Integer) : LongInt; begin Result := a + b; end; function For_A_To_B_Do(AForVon : Integer; AForBis : Integer; AFormel : TFormel; aParameter : Integer; bParameter : Integer) : Integer; var i : Integer; begin Result := 0; for i := AForVon to AForBis do Result := Result + AFormel(aParameter, bParameter); end; function machmalwas : Integer; var Formel : TFormel; begin Formel := EineFormel; Result := For_A_To_B_Do(1,100,Formel,100,200); Formel := NochEineFormel; Result := Result div For_A_To_B_Do(1,100,Formel,100,200); end; |
AW: For-Schleife als Template mit Prozedur als Parameter?
Für Tokyo habe ich das jetzt so gemacht
Delphi-Quellcode:
X wird 3x aufgerufen.
type
TProcedureParameter = reference to procedure(i: Integer); implementation procedure ForLoop(Proc: TProcedureParameter); var i: Integer; begin for i := 0 to 3 do Proc(i); end; procedure TForm1.Button3Click(Sender: TObject); begin ForLoop( procedure(i: Integer) begin ShowMessage(i.ToString); end); end; Wenn ich jetzt etwas am Schleifenkopf ändere, muss ich es nur noch an einer Stelle tun und nicht mehr an 100. => Habe erfolgreich resigniert :thumb: klappt nicht so wie ich will. Denn abbrechen kann man die Schleife dann scheinbar nicht mehr. |
AW: For-Schleife als Template mit Prozedur als Parameter?
Kann man das nicht als Funktion schreiben, die False zurück gibt, wenn abgebrochen werden soll?
for i := 0 to 3 do if not Proc(i) then break; |
AW: For-Schleife als Template mit Prozedur als Parameter?
Das ist die Frage. Das übersteigt aber meine Fähigkeiten :oops:
|
AW: For-Schleife als Template mit Prozedur als Parameter?
Delphi-Quellcode:
implementation
procedure ForLoop(Func: TFunc<Integer, Boolean>); var i: Integer; begin for i := 0 to 3 do if not Func(i) then Break; end; procedure TForm1.Button3Click(Sender: TObject); begin ForLoop( function(i: Integer): Boolean begin ShowMessage(i.ToString); Result := I <= 1; //oder vllt eher Result := I <= 2; if Result then ShowMessage(i.ToString); end); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 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 by Thomas Breitkreuz