AGB  ·  Datenschutz  ·  Impressum  







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

Procedure in Procedure

Ein Thema von Metschu · begonnen am 31. Mär 2014 · letzter Beitrag vom 31. Mär 2014
Antwort Antwort
Seite 1 von 2  1 2      
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Procedure in Procedure

  Alt 31. Mär 2014, 09:29
Delphi-Version: XE2
Hallo zusammen,

auf der Suche nach einer XML-Komponente wurde mehrfach der xml Paraser empfohlen.
In dem Beispielcode ist unter anderem eine Procedure innerhalb einer Procedure:
Delphi-Quellcode:
PROCEDURE TFrmMain.FillTree;

  PROCEDURE ScanElement (Parent : TTreeNode);
  VAR
    Node : TTreeNode;
    Strg : AnsiString;
    EN : TElementNode;

  BEGIN
    WHILE XmlParser.Scan DO BEGIN
      Node := NIL;
      CASE XmlParser.CurPartType OF
        ptXmlProlog : BEGIN
                        Node := TrvDoc.Items.AddChild (Parent, '<?xml?>');
                        Node.ImageIndex := Img_Prolog;
                        EN := TElementNode.Create (StrSFPas (XmlParser.CurStart, XmlParser.CurFinal), NIL);
                        Node.Data := EN;
                      END;
{noch weitere CASE abfragen...}
     END;
      IF Node <> NIL THEN
        Node.SelectedIndex := Node.ImageIndex;
      END;
  END;

BEGIN
  TrvDoc.Items.BeginUpdate;
  TrvDoc.Items.Clear;
  XmlParser.Normalize := TRUE;
  XmlParser.StartScan;

  ScanElement (NIL);

  TrvDoc.Items.EndUpdate;
END;
Was hat dies für einen Hintergrund?
"ScanElement" wird ja nur einmal aufgerufen.

Danke schonmal.

Gruß

Torsten
Torsten
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: Procedure in Procedure

  Alt 31. Mär 2014, 09:33
Übersichtlichkeit. Durch die Namensgebung der 2. Procedure wird automatisch dokumentiert, was dieser Codeabschnitt bewirkt.
Technisch hätte man es auch direkt in die 1. Procedure schreiben können.
Jens
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#3

AW: Procedure in Procedure

  Alt 31. Mär 2014, 10:17
Übersichtlich ist das Beispiel gar nicht. In dem Besipiel macht es m.E. keinen Sinn. Es macht Sinn, wenn die entsprechende Procedure mehrfach in der umschliessenden Procedure aufgerufen wird.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#4

AW: Procedure in Procedure

  Alt 31. Mär 2014, 10:21
Ach ja. Sollten in der äusseren Procedure Variablen deklariert sein, kann die innere Procedure darauf zugreifen. Ist im Besispiel aber nicht gegeben.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Procedure in Procedure

  Alt 31. Mär 2014, 10:40
Übersichtlich ist das Beispiel gar nicht. [...]
Das ist Ansichtssache.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#6

AW: Procedure in Procedure

  Alt 31. Mär 2014, 10:50
Stimmt. Ansichtssache

Aber in dem Fall hätte man die innere Procedure komplett auslagern können, da ja nicht auf Variablen der äusseren Procedure zurückgegriffen wird.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Procedure in Procedure

  Alt 31. Mär 2014, 10:53
Stimmt. Ansichtssache

Aber in dem Fall hätte man die innere Procedure komplett auslagern können, da ja nicht auf Variablen der äusseren Procedure zurückgegriffen wird.
Welchen sinn macht das ?
Wenn diese Procedure im gesamten Code nur einmal verwendet wird.
Irgendwie unlogisch oder?

gruss

Geändert von EWeiss (31. Mär 2014 um 10:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: Procedure in Procedure

  Alt 31. Mär 2014, 10:55
Das mit der Übersichtlichkeit ist natürlich immer subjektiv.

Man hätte sich hier auch den Parameter sparen können, da offensichtlich immer NIL übergeben wird. Es sieht so aus, als wäre die innere Procedure ein Relikt aus Zeiten, wo der Aufruf noch öfter (mit verschiedenen Parameterwerten) vorkam.

Trotzdem kann die Aufteilung schon Übersichtlichkeit bringen (wie gesagt, die Funktion des Codeabschnitts ergibt sich hier schon aus dem Namen).
Ich persönlich nutze diese Procedure-in-Procedure-Konstrukte recht selten. Hier in dem Fall hätte ich auch eine private procedure von TfrmMain davon gemacht.
Jens
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Procedure in Procedure

  Alt 31. Mär 2014, 11:09
Eventuell war in der Procedur früher mal ein rekursiver Code, der dann später zu diesem iterativen Code umgebaut wurde?
Und der Einfachheit halber ließ man den Code dann ganz einfach dort.

Aber in dem Fall hätte man die innere Procedure komplett auslagern können, da ja nicht auf Variablen der äusseren Procedure zurückgegriffen wird.
Auslagern gut und schön, aber dann auch bitte richtig!
Also XmlParser und TrvDoc gehören gefälligst in den Parametern übergeben.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (31. Mär 2014 um 11:11 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: Procedure in Procedure

  Alt 31. Mär 2014, 11:21
Variante 1;
Delphi-Quellcode:
Procedure Something();
Begin
  if Foobar>23 then Stuff:=Bar;
  For bar in foo do begin
  ...
  end;
end;
Variante 2:
Delphi-Quellcode:
Procedure Something();
  Procedure SetStuff();...
  Procedure ProcessAllFoos();...
Begin
  SetStuff();
  ProcessAllFoos();;
end;
Variante 2 *dokumentiert* ohne Kommentar. Prozeduren sind ja nicht nur dazu da, um Redundanz zu vermeiden, sondern sollen die Lösung (also den Code) in Teillösungen unterteilen. Im Idealfall so, das jede Teillösung (aka Prozedur, Methode) nur eine einzige Aufgabe hat (=> Clean Code).

Die Sache mit den lokalen Prozeduren ist ein Überbleibsel aus der Vor-OOP-Zeit. Mittlerweile würde man das eher als private Methode umsetzen.
  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 10:47 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