Zitat:
Das geht an die Grenze der Lesbarkeit. Das sind bereits 8 Zeichen Einrueckung.
Nicht viele Programmierer koennen dieser Tiefe folgen, besonders wenn Bezug auf globalere Variablen genommen wird.
Irrelevant. Der Sinn ist es doch diese Teil-Aufgaben selber als "Black-Boxes" zu verifizieren. Somit würde sich sogar eine 16 fach nested Funktion immer noch lohnen falls man ihre Funktionalität aus sich selber heraus verifizieren kann. Statt also eine Monster Funktion im Gesammten zu verifizieren, würde man mit nested Funktionen Stück für Stück verifizieren. Sobald eine solche nested Funktion verifiziert wurde, kann man sie aus dem Kopf streichen und einfach überlesen.
Somit erhöht die Modularisierung, egal ob nested Funktion oder Objectmethoden oder Units oder externe
DLL's, immer auch die Wartbarkeit und Lesbarkeit. Der EINZIGSTE relevante Unterschied zwischen nested Funktionen und anderen Methoden der Modularisierung besteht in ihere Gültigkeit=Scope. Nun nested Funktionen sind globale für die Übergeordneten Scopes, aber Lokale innerhalb des übergeordenten Scopes. Sie können also auf anderer Modularisierungsebene, zB. Objecten, Units, Program, Library nicht merhfach benutzt werden.
Somit ist auch die logische Frage geklärt WANN man zu nested Funktionen greifen sollte.
Das Konzept der nested Funktionen ist also absolut sauberer Programmierstil.
@Performance:
Da der Delphi Optimierer immer lokal zu einer Procedure optimieren kann, also NICHT Procedure-übergreifend, sind durch die Vereinfachungen komplexer Proceduren mit Hilfe von nested Prozeduren sogar erhebliche Performance-Steigerungen zu erwarten. Statt also EINE Prozedure mit 100 zu optimierenden Variablen zu optimieren kann der Compiler bei nested Funktionen viel kleine und voneinander unabhänig abgeschlossenen Optimierungen vornehmen. Dadurch ist eine höher Performance des erzeugten Gesamtcodes zu erwarten.
WICHTIG! ist dabei nur eines, die nested Funktionen sollte NICHT allzuofft auf Variablen der übergeordneten Funktion zugreifen. Statt also nested Funktionen ohne Parameter zu benutzen, ist es besser eben auch den nested Funktion so wie mit jeder anderen Procedure/Methode usw. die releaventen Daten als Paramter zu übergeben. Benutzt eine nested Funktion KEINERLEI Zugriffe auf übergeordete Lokale Stack Variablen, so kann der Optimieren einen zusätzlichen Stackframe wegoptimieren. Dadurch wird nochmals die Gesamtperformance gesteigert.
Gruß Hagen