![]() |
Geschachtelte Prozeduren/Funktionen
Hiho,
sagt mal welchen Sinn macht es geschachtelte Prozeduren/Funktionen zu verwenden? Also damit meine ich sowas:
Delphi-Quellcode:
Einen anderen Nutzen, außer dass man sich die Deklaration spart, kann ich nicht erkennen. Sind solche Konstrukte schneller, oder was bringts?
procedure OberProzedur (....);
procedure UntergeordneteProzedur(...); var (...) begin //mach was end; function UntergeordneteFunktion(...):(...); begin //mach auch irgendwas end; var //von OberProzedur (..) begin ... end; MfG |
Re: Geschachtelte Prozeduren/Funktionen
Die Prozedur/Funktion hat nur einen lokalen Scope (Gültigkeitsbereich)
|
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 |
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... |
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.
|
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 |
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?! |
Re: Geschachtelte Prozeduren/Funktionen
Zitat:
|
Re: Geschachtelte Prozeduren/Funktionen
Zitat:
So?
Delphi-Quellcode:
oder so:
function Master(...):(...);
function Slave1(...):(...); begin function Master(...):(...); end; var //Master usw.
Delphi-Quellcode:
:?:
function Master(...):(...);
function Slave1(...):(...); begin function Slave1(...):(...); end; var //Master usw. Zitat:
|
Re: Geschachtelte Prozeduren/Funktionen
Zitat:
Delphi-Quellcode:
Auch sehr schön dafür:
function Master(...):(...);
function Slave1(...):(...); begin function Slave1(...):(...); end; var //Master usw.
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 11:07 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