AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?

kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?

Ein Thema von juergen · begonnen am 31. Mär 2018 · letzter Beitrag vom 31. Mär 2018
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.163 Beiträge
 
Delphi 11 Alexandria
 
#1

kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?

  Alt 31. Mär 2018, 16:23
Hallo zusammen,

in meinem Code muss ich in den verschiedensten Proceduren immer wieder dieselben Bedingungen abfragen. In den Bedingungen werden verschiedenste Stati geprüft.
Das produziert Unmengen an gleichen Code und ist somit schwer wartbar/erweiterbar/ anpassbar.
Wenn es geht, würde ich das gerne ändern und suche daher nun ein Konzept.

Beispiel:
Delphi-Quellcode:
procedure Tfrm_Main.machwas;
var
  ls_FileName : string;
  RecIdx, RowIdx : Integer;
begin
  ls_FileName := ....;
  RecIdx := ....;
  RowIdx := ....;

  if gb_Stati_1 then
  begin
    procedur 1(ls_FilenName, RecIdx, RowIdx);

  end else if gb_Stati_4 then
  begin
    procedur 2(ls_FilenName, RecIdx, RowIdx);
  end;
....
end;
Im Prinzip soll in der Procedure "machwas" die ganzen Abfragen wegfallen die dann in einer globalen Procedure(?) stehen und der man als Parameter für die einzelnen Bedingungen eine andere Proceduren übergeben kann.

Beispiel:
Delphi-Quellcode:
procedure Tfrm_Main.Check_Statis(const procedure x, const procedure y);
begin
  if gb_Stati_1 then
  begin
    x; //<== meine 1. "variable" Procedure
  end else if gb_Stati_4 then
  begin
    y; //<== meine 2. "variable" Procedure
  end;
....
end;

procedure Tfrm_Main.machwas;
var
  ls_FileName : string;
  RecIdx, RowIdx : Integer;
begin
  ls_FileName := ....;
  RecIdx := ....;
  RowIdx := ....;

  Check_Statis(x, y);
So meine Vorstellungen.
Die Bedingungen sind einiges komplexer wie hier dargestellt und die Anzahl der Proceduren (also die Anzahl der Bedingungen) sind momentan 8 Stk.
Ich denke das es für die Profiprogrammierer dafür eine Lösung geben müsste.
Gibt es die Möglichkeiten einer Procedure als Parameter eine andere Procedure zu übergeben? Oder wie löst man diese Anfortderung?
Leider bin ich (noch) sehr procedure-lastig beim Hobby-programmieren.

Ich hoffe ich konnte mein Problem überhaupt verständlich darstellen und bedanke mich schon mal vorab für Ideen und Konzeptvorschläge.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
bnreimer42

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
122 Beiträge
 
Delphi 12 Athens
 
#2

AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?

  Alt 31. Mär 2018, 16:31
Ich weis nicht, ob das mit Delphi XE schon geht, aber schau mal unter http://docwiki.embarcadero.com/RADSt...oden_in_Delphi
Björn Reimer
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?

  Alt 31. Mär 2018, 16:48
Jap...das geht Einfach mal nach dem Stichwort "Callback" suchen
Die Methode über Callbacks hat den "Nachteil" das du eine fixe Paremterliste für alle Prozeduren hast.

Innerhalb eines Objektes brauchst du die Prozedur aber nicht mal übergeben..schließlich kennst du die einzelnen Prozeduren, die je nach Status aufgerufen werden sollten.

Evtl. wär auch das ein Ansatz:

Delphi-Quellcode:
Type
  TCallback = Procedure (Parameter1:string);
  TStatus = (sStatus1,sStatus2,sStatus3);

Procedure Callback1(param1:string);
begin
  :
end;

Procedure Callback2(param1:string);
begin
  :
end;

Procedure CallBack3(Param1:string);
begin
  :
end;

const
  TCalls : array[TStatus] of TCallback = (
   @Callback1,@Callback2,@Callback3
  );

Procedure CheckState(aState:TStatus);
begin
  TCalls[aState]('Was auch immer');
end;
Hab das jetzt nicht ausprobiert ob das so geht, aber vom Prinzip her sollte es gehen.
Uwe
e=mc² or energy = milk * coffee²

Geändert von Ghostwalker (31. Mär 2018 um 17:03 Uhr) Grund: Erweiterung
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?

  Alt 31. Mär 2018, 16:56
Da geht:

Delphi-Quellcode:
type
  TMyCheckFunction = function(...): Boolean;

procedure Machwas(MyCheckFunction: TMyCheckFunction);
begin
  ...
  if MyCheckFunction(...) ...
end;


function CheckImpl1(...): Boolean;

function CheckImpl2(...): Boolean;


procedure DoIt;
begin
  Machwas(CheckImpl1);
  
  Machwas(CheckImpl2);
end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.163 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?

  Alt 31. Mär 2018, 21:16
Hallo,

danke für das Aufzeigen verschiedener Möglichkeiten.
Ich werde mich wohl für anonyme Methoden entscheiden, da diese in meiner Delphi-Hilfe auch ziemlich gut erklärt sind.

Schöne Ostern!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#6

AW: kann man einer Procedure als Parameter eine andere Procedure übergeben, o.ä.?

  Alt 31. Mär 2018, 21:35
Und natürlich gibt es noch die Objekt-Methoden, so wie du sie schon seit Jahren aus deinem Delphi kennst ... z.B. die Events der VCL, ala OnClick, OnCreate usw.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
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 16:03 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