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?

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
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.224 Beiträge
 
Delphi 10.4 Sydney
 
#1

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

  Alt 2. Jan 2018, 13: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.559 Beiträge
 
Delphi 7 Professional
 
#2

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

  Alt 2. Jan 2018, 13: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 13: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
 
#3

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

  Alt 2. Jan 2018, 14: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 14:36 Uhr)
  Mit Zitat antworten Zitat
Jumpy

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

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

  Alt 2. Jan 2018, 15: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
 
#5

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

  Alt 2. Jan 2018, 15: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
 
#6

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

  Alt 2. Jan 2018, 15: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 15:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#7

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

  Alt 2. Jan 2018, 16:23
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.
Geht's dir wirklich nur um die Anzahl??? Dann nimm bittebittebitte eine Konstante!

Delphi-Quellcode:
const
  cLoopCount = 4;

for i := 0 to cLoopCount - 1 do // oder for i := 1 to cLoopCount do
  ...
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:05 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