AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign For-Schleife als Template mit Prozedur als Parameter?
Thema durchsuchen
Ansicht
Themen-Optionen

For-Schleife als Template mit Prozedur als Parameter?

Ein Thema von LTE5 · begonnen am 2. Jan 2018 · letzter Beitrag vom 4. Jan 2018
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 13:46
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:
for i := 0 to 99 do
 begin
  1
  2
  3
 end;

for i := 0 to 99 do
 begin
  A
  B
  C
 end;
In obigen Falle (Beispiel) würde ich mir diese doppelte Schreibarbeit des Schleifenkopfes gerne ersparen und stattdessen so was hier schreiben
Delphi-Quellcode:
ForTemplate0To99.Do(
 procedure
  begin
   A
   B
   C
  end);
);

oder

ForTemplate0To99.Do(MeineProcedur;);
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 13:49
Ja, das geht über Anonyme Methoden.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 13:51
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 13:52
Zitat:
Aber ob sich das Lohnt 3 Zeilen einer sehr verständlichen schleife durch sowas wie Methodenparameter und anonyme Methoden zu ersetzen lohnt?
Das war doch nur ein Beispiel
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 14:00
Zitat:
Aber ob sich das Lohnt 3 Zeilen einer sehr verständlichen schleife durch sowas wie Methodenparameter und anonyme Methoden zu ersetzen lohnt?
Das war doch nur ein Beispiel
Die beiden Mitforisten haben dir ja schon weiterführende Links bzw. Beispielcode gegeben.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 14:43
Unter Delphi 7 kann man das so machen:
Delphi-Quellcode:
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;
Und das ist noch nichteinmal kryptisch.

Geändert von Delphi.Narium ( 2. Jan 2018 um 14:50 Uhr) Grund: PS: Das hat auch schon unter Turbo-Pascal funktioniert ;-)
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 15:04
Für Tokyo habe ich das jetzt so gemacht

Delphi-Quellcode:
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;
X wird 3x aufgerufen.
Wenn ich jetzt etwas am Schleifenkopf ändere, muss ich es nur noch an einer Stelle tun und nicht mehr an 100.

=> Habe erfolgreich resigniert
klappt nicht so wie ich will. Denn abbrechen kann man die Schleife dann scheinbar nicht mehr.

Geändert von LTE5 ( 2. Jan 2018 um 15:36 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 16:06
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;
Ralph
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 16:08
Das ist die Frage. Das übersteigt aber meine Fähigkeiten
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

AW: For-Schleife als Template mit Prozedur als Parameter?

  Alt 2. Jan 2018, 16:16
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;
Sebastian

Geändert von SProske ( 2. Jan 2018 um 16:21 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 09:08 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