![]() |
Break/Exit verwenden?
Moin,
angenommen ich habe eine solche Funktion:
Delphi-Quellcode:
Ok, es ist eine doofe Funktion hier, aber das tut ja nichts zur Sache *g*.
function bla: char;
const C = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var I: Integer; begin Result := #0; for I := 1 to Length(C) do begin if C[I] = 'B' then Result := 'B'; end; end; Die Frage: Ist es nun sinnvoll die Funktion nachdem Ergebnis noch weiterlaufen zu lassen nur um ein Break/Exit zu umgehen? Klar macht das hier Performancemäßig keinen Unterschied, aber in meiner anderen Funktion schon. Also wie siehts aus, nach Ergebnis abbrechen(Exit, Break) oder ohne Sinn weiterlaufen lassen? (While-Schleife kommt hier nicht in Frage, auch wenn es in _diesem_ Beispiel möglich wäre) MfG |
Re: Break/Exit verwenden?
Hi,
also ich würde break; verwenden, da man es sich dann einfach angewöhnt und in anderen Funktionen nicht erst überlegen muss ob man es verwendet oder nicht. Der Performancevorteil mag hier nicht sehr groß sein, aber es bringt schon etwas denke ich ;) cu |
Re: Break/Exit verwenden?
Moin,
oft kann man ein break auch umgehen, wenn man aus einer for eine while scheife macht...
Delphi-Quellcode:
Damit bricht man die Schleife auch vorzeitig ab.
function bla: char;
const C = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var I: Integer; begin Result := #0; I := 1; while I <= Length(C) do begin if C[I] = 'B' then begin Result := 'B'; I := Length(C); end; inc(I); end; end; Ich persönlich finde das immernoch besser als ein break, aber da denkt sicherlich jeder anders drüber :-D |
Re: Break/Exit verwenden?
Also ich bevorzuge Break. Man sollte auch darauf achten Exit nicht unnoetig zu verwenden.
In diesem Fall sind ja Break und Exit aequivalent aber das Problem beginnt, wenn man die Funktion erweitert. |
Re: Break/Exit verwenden?
Delphi-Quellcode:
Eine Funktion soll ein Ergebnis liefern, deshalb muss sie terminieren. Das Ergebnis unter bestimmten Vorgaben auf die wirtschaftlichste Weise zu berechnen - das ist Programmieren. Es ist nie eine Frage des Laufzeitverhaltens, ob man eine Iteration abbricht, nachdem das Ergebnis feststeht - es ist stets eine Frage der Logik.
function bla: char;
const C = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var I: Integer; begin // Prolog Result := #0; // Iteration for I := 1 to Length(C) do if C[I] = 'B' then begin Result := 'B'; Exit; end; // Epilog end; In deinem Code-Beispiel wird das Ergebnis durch Iteration bestimmt. Sobald der Epilog keinen Code aufweist haben Break und Exit den gleichen Effekt. Wie der Compiler das im Einzelfall umsetzt darf dich an dieser Stelle nicht interessieren. Wegen des fehlenden Epilogs ist Exit hier die korrekte Terminierung. Break und Exit sind makellose Sprachmittel, warum glaubst du sie vermeiden zu müssen? Grüße vom marabu |
Re: Break/Exit verwenden?
@secure, Robert: Dann werd ichs mit Break; machen ;)
@Narayana: Zitat:
@marabu: Zitat:
Und nen schlechten Stil will ich mir ja nicht aneignen(wenn das hier der Fall wäre). Danke auch allen ansonsten :) |
Re: Break/Exit verwenden?
Zitat:
Z.B. ist das hier:
Delphi-Quellcode:
IMHO oft üersichtlicher als einen ohnehin schon relativ tiefen If-Baum noch eine Ebene tiefer zu schieben.
function TTest.MachWasWennTestGroesserNull(test : integer);
begin if test = 0 then begin exit; end; ....viele geschachtelte If's end; |
Re: Break/Exit verwenden?
Zitat:
|
Re: Break/Exit verwenden?
Weil meine Funktion schnellstmöglich sein muss und anders als bei C++ wird bei der For-Schleife die Bedingung nur 1mal geprüft, bei While-Schleifen hingegen wird die Bedingung immer geprüft.
Ausserdem finde ich For-Schleifen elaganter das ich da nicht selbst Inc(I) machn muss =) Btw: in deinem Beispiel wäre das Exit aber unnötig, da man das gleiche ja mit:
Delphi-Quellcode:
hinkriegen würde.
function TTest.MachWasWennTestGroesserNull(test : integer);
begin if test <> 0 then begin ....viele geschachtelte If's end; end; |
Re: Break/Exit verwenden?
Das in meinem Beispiel das exit nich notwendig ist ist mir schon klar. Ich verwende es nur gelegentlich so, wenn die vielen geschachtelten if's (oder was auch immer) schon ziemlich tief gehen und optisch gerade noch erträglich sind.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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