![]() |
Frage zu proceduren innerhalb anderer proceduren
Hallo,
beim lesen verschiedener Beispiele sehe ich manchmal, dass sich innerhalb von proceduren andere proceduren befinden Beispiel ![]() Habe ich hier etwas falsch gelesen und wenn nicht, welchen Sinn macht diese Vorgehensweise? Vielen Dank für Eure Antwort Gruß Gebhard |
Re: Frage zu proceduren innerhalb anderer proceduren
In dem zitierten Beispiel sehe ich es im Sinne einer besseren Lesbarkeit der Quellcodes.
Gruß, Willmar |
Re: Frage zu proceduren innerhalb anderer proceduren
Zitat:
Eingesetzt wird dieses Verfahren, wie auch schon Willmar anmerkte, hauptsächlich um die Lesbarkeit des Quellcodes zu erhöhen. Viele kleine lokale Prozeduren oder Funktionen, von denen jede nur einen Teil der Aufgabe erledigt und innerhalb der Hauptprozedur eine Aneinanderreihung derselben. Die Unterfunktionen/-prozeduren sollten dabei aber sehr speziell sein und nur an dieser Stelle Verwendung finden können. Sobald man Teile mehrfach verwenden kann, sollten diese Teil z.B. des Private-Teils der Klasse sein. In dem von Dir angeführten Beispiel erschliesst sich wegen dem einzeiligen Aufruf der Unterprozedur der Sinn allerdings nur sehr begrenzt :) |
Re: Frage zu proceduren innerhalb anderer proceduren
Der Spaß nennt sich "nested procedure" (können aber genau so gut functions sein), und ist eigentlich eher als Relikt zu betrachten, auch wenn der eine oder andere durchaus Argumente für die Benutzung im Einzelfall anbringen dürfte.
Letztlich geht es nur darum, Code der in der Mutter-Funktion/Prozedur sonst mehrfach geschrieben werden müsste, auszulagern. Diese nested procedures sind ausserhalb der Mutter-Funktion nicht sichtbar, und sie können zudem auf die lokalen Variablen der Mutter-Funktion zugreifen - was auch gleich schon ein Argument gegen ihre Verwendung ist, da dies extrem unübersichtlich/-erwartet sein kann. Heutzutage, im Zeitalter von Klassen und Co, ist sowas eher über ganz normale private Methoden vorzuziehen. Dann können zwar andere Methoden der Klasse diese auch sehen, aber das tut keinem Weh, und man spart sich ggf. Umbauten wenn man diese Unterfunktion doch noch an anderer Stelle in der Klasse brauchen könnte. Es gibt halt so eine halbe Hand voll Spezialfälle wo diese Dinger echt komfortsteigernd sind, aber im Großen und ganzen mindern sie eher die Lesbarkeit im Vergleich zu der Alternative. |
Re: Frage zu proceduren innerhalb anderer proceduren
Zitat:
Denn wie gesagt, kann man so vorallem leichter erkennen, wozu sie gehören, ohne gleich alles mit Kommentaren vollstopfen zu müssen. Und gerade der Vorteil auf Parameter und lokale Variablen zugreifen zu können ist ein großer Vorteil. Gut, hier muß man aufpassen und darum werden (bei mir) solche Variablen vor den "nested procedures" deklariert und die Restlichen danach. Immerhin kann man so auch einiges Einsparen und übersichtlicher machen, wenn man dieses mit Bedacht einsetzt. PS: Wie hießen nochmal diese "neumodischen" Funktionen, welche man mitten im QuellCode deklarieren kann? irgendwie so
Delphi-Quellcode:
Und jetzt erkläre mir mal jemand, warum dann diese extremen "nested procedures" so toll sind
SL.Sort(function(a, b: irgendwas)
begin Result := Vergleiche(a, b); end); und was an den einfachen "nested procedures" soooooo schlimm sei? |
Re: Frage zu proceduren innerhalb anderer proceduren
Hallo,
vielen Dank für Eure Antworten. Tschüss und schöne Ostern Gebhard |
Re: Frage zu proceduren innerhalb anderer proceduren
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Frage zu proceduren innerhalb anderer proceduren
Zitat:
"normale" Prozeduren, Funtionen und Methoden liegen auf einer oberen Ebene (haben also 2 Leerzeichen davor) die "nested" Proceduren liegen eine Ebene tiefer ... unterhalb der Elern-Prozedur (haben also 4 Leerzeichen davor und das nahfolgende BEGIN auf gleicher Höhe wäre dann der Beginn der Elternprozedur) Aber OK, längere Prozeduren lagere ich inzwischen auch immer öfters aus. :angel2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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-2025 by Thomas Breitkreuz