AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Methoden-Deklaration vorgeben?

Ein Thema von Der schöne Günther · begonnen am 13. Aug 2013 · letzter Beitrag vom 14. Aug 2013
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 12:34
wat
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#2

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 13:15
Ich frage mich eher, ob es nicht eine bessere Lösung gibt. Das hört sich für mich eher wie eine Frage nach der Umsetzung einer ungünstigen Lösung des Problems an als nach einer Frage nach dem Problem selbst...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 13:36
Nichts großartiges - Es ging um das Empfangen von Netzwerkpaketen und Erstellen einer Antwort. Je nachdem was für eine Information im ankommenden Paket enthalten ist, werden vollkommen unterschiedliche Dinge getan.

Delphi-Quellcode:
if ankommendesPaket.commandStr = 'zooBesuchthen
   TPaketbehandler.zooBesuchProc(ankommendesPaket, ausgehendesPaket, weitereParams)
else if ankommendesPaket.commandStr = 'zirkusBesuchthen
   TPaketbehandler.zirkusBesuchProc(ankommendesPaket, ausgehendesPaket, weitereParams)
;
Die Methoden wie zooBesuchProc schauen sich das Paket an, tuen entsprechende Dinge und generieren eine Antwort. Mehr steckt nicht dahinter.

Abgesehen davon welches halbe Dutzend etablierte Patterns ich hier hätte unterbringen können, rein syntaktisch wollte mir nur sparen, für alle Methoden ständig die gleichen Parameterlisten in der Deklaration runterzutippen sondern es einmal an einem Platz haben...
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 13:57
Abgesehen davon welches halbe Dutzend etablierte Patterns ich hier hätte unterbringen können, rein syntaktisch wollte mir nur sparen, für alle Methoden ständig die gleichen Parameterlisten in der Deklaration runterzutippen sondern es einmal an einem Platz haben...
Du kopierst dir einfach die erste Methode mit der notwendigen Parameterliste und fügst dann das Kopierte darunter so oft ein, wie du es benötigst:
Delphi-Quellcode:
private
  procedure proc1(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc1(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc1(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc1(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc1(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc1(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc1(input1: Integer; input2: TSomeClass; out output: Double);
Danach mußt du nur noch die Proceduren-Bezeichner der Kopien ändern:
Delphi-Quellcode:
private
  procedure proc1(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc2(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc3(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc4(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc5(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc6(input1: Integer; input2: TSomeClass; out output: Double);
  procedure proc7(input1: Integer; input2: TSomeClass; out output: Double);
Am Schluß erzeugst du die Methoden mit Strg+Shift+C:
Delphi-Quellcode:
procedure TForm1.proc1(input1: Integer; input2: TSomeClass; out output: Double);
begin

end;

procedure TForm1.proc2(input1: Integer; input2: TSomeClass; out output: Double);
begin

end;

procedure TForm1.proc3(input1: Integer; input2: TSomeClass; out output: Double);
begin

end;

procedure TForm1.proc4(input1: Integer; input2: TSomeClass; out output: Double);
begin

end;

procedure TForm1.proc5(input1: Integer; input2: TSomeClass; out output: Double);
begin

end;

procedure TForm1.proc6(input1: Integer; input2: TSomeClass; out output: Double);
begin

end;

procedure TForm1.proc7(input1: Integer; input2: TSomeClass; out output: Double);
begin

end;
Dauer der Aktion bei 7 Proceduren: Unter einer Minute!
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

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

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 14:04
Dauer der Aktion bei 7 Proceduren: Unter einer Minute!
Mag sein. Eine in die Sprache integrierte Lösung wäre trotzdem schöner, wartungsfreundlicher und weniger fehleranfällig.
Uli Gerhardt
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 14:14
Richtig. So wie manche Bodybuilder auf Veranstaltungen gehen und ihren Körper bewundern lassen, führe ich oft vor, in welcher Geschwindigkeit meine Finger über die Tastatur huschen und mit welchen raffinierten RAD Studio-Tricks ich die wunderbarsten Dinge ermögliche. Ersteres könnte ich natürlich auch, aber da spielt Delphi nur noch eine untergeordnete Rolle.

Tipp des Tages: Die Code-Completion geht sogar rückwärts: Funktion direkt implementieren und der Editor ergänzt die Deklaration in der Klasse.

Zitat:
schöner, wartungsfreundlicher und weniger fehleranfällig
Genau darum ging es mir
Ich hätte die Parameterliste gerne nicht ein Dutzend mal redundant im Quelltext. Hat so etwas eigentlich einen hippen Fachbegriff?
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

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

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 14:19
ich hätte die parameterliste gerne nicht ein dutzend mal redundant im quelltext. Hat so etwas eigentlich einen hippen fachbegriff?
dry?

Edit: Ich darf DRY nicht großschreiben. :-/
Edit2: ... oder nur, wenn ich ganze Sätze formuliere.
Uli Gerhardt

Geändert von uligerhardt (13. Aug 2013 um 14:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 14:25
Das kann man auch schön so umsetzen

Delphi-Quellcode:
IMyMethod = interface
  procedure Execute( input1: Integer; input2: TSomeClass; out output: Double );
end;

// Eine Dummy-Klasse zum Veranschaulichen
TMyDummyMethod = class( TInterfacedObject, IMyMethod )
protected
  procedure Execute( input1: Integer; input2: TSomeClass; out output: Double );
end;

procedure TMyMethod.Execute( input1: Integer; input2: TSomeClass; out output: Double );
begin
  output := 0;
end;
Jetzt für jeden konkreten Befehl so eine Klasse erstellen und die jeweilige Instanz in einem TDictionary<string,IMyMethod> verwalten

Der Aufruf gestaltet sich ja dann sehr smart
Delphi-Quellcode:
type
  TPacketHandler = class
  private
    fMethodDict : TDictionary<string,IMyMethod>;
  public
    procedure Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double );
    procedure AddMethod( const ACommandStr : string; AMethod : IMyMethod );
  end;

procedure TPacketHandler.Execute( const ACommandStr : string; input1: Integer; input2: TSomeClass; out output: Double );
begin
  fMethodDict[ACommandStr].Execute( input1, input2, output );
end;

procedure TPacketHandler.AddMethod( const ACommandStr : string; AMethod : IMyMethod );
begin
  fMethodDict.AddOrSet( ACommandStr, AMethod );
end;
Man kann das auch mit einem Chain-Of-Responsibility-Pattern lösen, aber für meinen Geschmack nehme ich lieber ein Dictionary
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (13. Aug 2013 um 14:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Methoden-Deklaration vorgeben?

  Alt 14. Aug 2013, 01:57
Mit geschachtelten Funktionen lässt sich das "Problem" lösen:

Delphi-Quellcode:
procedure AllInOneHandler(input1: Integer; input2: TSomeClass; out output: Double);

  procedure proc1; // hat Zugriff auf die Parameter der äusseren Funktion oder Methode
  begin
  end;
 
  procedure proc2; // so was von dry - dryer geht's nicht
  begin
  end;

begin
  if ankommendesPaket.commandStr = 'zooBesuchthen
    proc1
  else if ankommendesPaket.commandStr = 'zirkusBesuchthen
    proc2
  else
    ...
end;
fork me on Github
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: Methoden-Deklaration vorgeben?

  Alt 13. Aug 2013, 14:27
Dauer der Aktion bei 7 Proceduren: Unter einer Minute!
Mag sein. Eine in die Sprache integrierte Lösung wäre trotzdem schöner, wartungsfreundlicher und weniger fehleranfällig.
Damit mußt du dich an Embarcadero wenden ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02: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