Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Geschachtelte Prozeduren/Funktionen (https://www.delphipraxis.net/115067-geschachtelte-prozeduren-funktionen.html)

ToFaceTeKilla 5. Jun 2008 11:02


Geschachtelte Prozeduren/Funktionen
 
Hiho,

sagt mal welchen Sinn macht es geschachtelte Prozeduren/Funktionen zu verwenden? Also damit meine ich sowas:
Delphi-Quellcode:
procedure OberProzedur (....);
  procedure UntergeordneteProzedur(...);
  var (...)
  begin
   //mach was
  end;

  function UntergeordneteFunktion(...):(...);
  begin
  //mach auch irgendwas
  end;

var //von OberProzedur
(..)
begin
...
end;
Einen anderen Nutzen, außer dass man sich die Deklaration spart, kann ich nicht erkennen. Sind solche Konstrukte schneller, oder was bringts?

MfG

mkinzler 5. Jun 2008 11:05

Re: Geschachtelte Prozeduren/Funktionen
 
Die Prozedur/Funktion hat nur einen lokalen Scope (Gültigkeitsbereich)

JasonDX 5. Jun 2008 11:05

Re: Geschachtelte Prozeduren/Funktionen
 
Zum einen sind sie außerhalb der Funktion nicht verfügbar, zum anderen kann man auch direkt auf darüber deklarierten Variablen und den Parametern der Funktion zugreifen, ohne diese selbst wieder als Parameter mitgeben zu müssen. Schneller dürften sie nicht sein, der Compiler dürfte allerhöchstens mehr zu Inlining tendieren.

greetz
Mike

Elvis 5. Jun 2008 11:06

Re: Geschachtelte Prozeduren/Funktionen
 
Der Sinn ist, dass man innerhalb der äußeren Methode die innere mehrmals aufrufen kann. (auch rekursiv)
Und das Ganze ohne, dass sie außerhalb sichtbar ist.Reduzierung von Sichtbarkeit auf das allernotwendigste ist einer der Grundsätze beim Programmieren...

Luckie 5. Jun 2008 11:06

Re: Geschachtelte Prozeduren/Funktionen
 
Ist ein Code in Unterfunktionen unterteil, kann der Compiler den Code teilweise besser optimieren. Und wenn diese Unterfunktionen nur von einer Routine benötigt werden kann man sie als Unterroutinen implementieren, so dass sie von anderen Routinen nicht sichtbar sind.

Andreas H. 5. Jun 2008 11:08

Re: Geschachtelte Prozeduren/Funktionen
 
Hallo,

ich mache sowas z.B. bei rekursiven Funktionen. Außen die "sichtbare" Funktion inklusive Vorbereitung etc. und innen die Funktionen, die rekursiv aufgerufen werden.

MfG. Andreas

taaktaak 5. Jun 2008 11:40

Re: Geschachtelte Prozeduren/Funktionen
 
Noch ein zusätzlicher Aspekt:

Ich verwende dieses Konstrukt insbesondere auch dann, wenn die Prozedur sonst zu umfangreich werden würde. Die übergeordnete Prozedur enthält dann im Extremfall nur wenige Zeilen, die die untergeordneten Procs/Funcs nacheinander aufruft. Im Sinne von: Die Aufgabe der übergeordneten Prozedur in Teilaufgaben gliedern und für jede Teilaufgabe eine eigene untergeordenet Proc/Func schreiben - ich finde das dann übersichtlicher.

PS: Habe irgendwo mal aufgeschnappt, dass eine (gute) Proc/Func aus maximal 20-30 Zeilen bestehen soll?!

Luckie 5. Jun 2008 11:42

Re: Geschachtelte Prozeduren/Funktionen
 
Zitat:

Zitat von taaktaak
PS: Habe irgendwo mal aufgeschnappt, dass eine (gute) Proc/Func aus maximal 20-30 Zeilen bestehen soll?!

Man sagt, sie sollte auf eine Bildschirmseite passen. Aber da moderne IDEs das Codefolding beherrschen, kann man dieses Limit wohl langsam vergessen.

ToFaceTeKilla 5. Jun 2008 11:47

Re: Geschachtelte Prozeduren/Funktionen
 
Zitat:

Zitat von Andreas H.
Hallo,

ich mache sowas z.B. bei rekursiven Funktionen. Außen die "sichtbare" Funktion inklusive Vorbereitung etc. und innen die Funktionen, die rekursiv aufgerufen werden.

MfG. Andreas

Wie muss ich mir das vorstellen?
So?
Delphi-Quellcode:
function Master(...):(...);
  function Slave1(...):(...);
  begin
    function Master(...):(...);
  end;
var //Master
usw.
oder so:
Delphi-Quellcode:
function Master(...):(...);
  function Slave1(...):(...);
  begin
    function Slave1(...):(...);
  end;
var //Master
usw.
:?:


Zitat:

Zitat von taaktaak
Ich verwende dieses Konstrukt insbesondere auch dann, wenn die Prozedur sonst zu umfangreich werden würde... ich finde das dann übersichtlicher.

Also ich dazu hab ichs auch schon verwendet :stupid:

sirius 5. Jun 2008 12:07

Re: Geschachtelte Prozeduren/Funktionen
 
Zitat:

Zitat von ToFaceTeKilla
Wie muss ich mir das vorstellen?

So
Delphi-Quellcode:
function Master(...):(...);
  function Slave1(...):(...);
  begin
    function Slave1(...):(...);
  end;
var //Master
usw.
Auch sehr schön dafür:
Delphi-Quellcode:
procedure Master;
 procedure Nested
 begin
   ...
 end;
begin
  if Bedingung then
  begin
    Nested;
    //und jetzt etwas anders
  end
  else
  begin
    //zuerst etwas anders
    Nested;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr.
Seite 1 von 2  1 2      

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