mit begin.. end else oder mit try.. finally arbeite ist gehüpft wie gesprungen.
Ich sehe keine Bereicherung bei dieser Verwendung.
Schau dir nochmal das Beispiel aus meinem Edit an, vielleicht wird dann klarer was ich meine.
Konkret hat try..finally für dich in deinem Codebeispiel die folgenden Vorteile:
- Die Tiefe deiner Verschachtelung nimmt nicht pro Objekt/Handle um eine Ebene zu
- Du hast keine redundanten Finalisierungen
Klar kannst du es auch ohne try..finally hinbekommen, dass deine Objekte nur finalisiert werden, wenn sie zuvor auch korrekt initialisiert wurden, aber dann landest du zwangsweise bei Variante 1 oder 2 meines "C" Negativbeispiels.
Edit:
Andererseits prüfe ich nie auf Nil..
Sondern auf bsp. if Assigned(Fam) then
Zitat:
Die
Exception-Hilfsfunktion ist hierbei natürlich optional
Es ist Gewohnheit die Bedingungen direkt ohne Umwege zu prüfen. (Sehe da kein Manko in irgendeiner weise).
Beides vollkommen legitim
Der Springende Punkt ist eher, dass mit deiner Überprüfung ein neuer Block (und damit eine neue Verschachtelungs-Ebene) einhergeht, während bei der try..finally Variante lediglich ein
Exit
bzw. ein
raise
folgen muss.