Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Break/Exit verwenden? (https://www.delphipraxis.net/45702-break-exit-verwenden.html)

Pseudemys Nelsoni 11. Mai 2005 05:03


Break/Exit verwenden?
 
Moin,

angenommen ich habe eine solche Funktion:

Delphi-Quellcode:
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;
Ok, es ist eine doofe Funktion hier, aber das tut ja nichts zur Sache *g*.

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

sECuRE 11. Mai 2005 05:39

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

Narayana 11. Mai 2005 06:27

Re: Break/Exit verwenden?
 
Moin,

oft kann man ein break auch umgehen, wenn man aus einer for eine while scheife macht...

Delphi-Quellcode:
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;
Damit bricht man die Schleife auch vorzeitig ab.
Ich persönlich finde das immernoch besser als ein break, aber da denkt sicherlich jeder anders drüber :-D

Robert Marquardt 11. Mai 2005 06:56

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.

marabu 11. Mai 2005 06:59

Re: Break/Exit verwenden?
 
Delphi-Quellcode:
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;
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.

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

Pseudemys Nelsoni 11. Mai 2005 07:13

Re: Break/Exit verwenden?
 
@secure, Robert: Dann werd ichs mit Break; machen ;)

@Narayana:

Zitat:

(While-Schleife kommt hier nicht in Frage, auch wenn es in _diesem_ Beispiel möglich wäre)
;)

@marabu:

Zitat:

Break und Exit sind makellose Sprachmittel, warum glaubst du sie vermeiden zu müssen?
Ich meine hier irgendwie im Forum gelesen zu haben, das es ein schlecher Programmier-Stil sei und Break bzw Exit kostümierte GOTOs sind.

Und nen schlechten Stil will ich mir ja nicht aneignen(wenn das hier der Fall wäre).

Danke auch allen ansonsten :)

Sanchez 11. Mai 2005 07:15

Re: Break/Exit verwenden?
 
Zitat:

Zitat von marabu
Break und Exit sind makellose Sprachmittel, warum glaubst du sie vermeiden zu müssen?

Ich vermute mal, weil sie die Übersichtlichkeit des Codes negativ beeinflussen können, wenn sie irgendwo unmotiviert mitten in einer Funktion auftauchen. Für Schleifenabbrüche oder Parameter-Überprüfungen verwende ich exit und break eigentlich bedenkenlos.

Z.B. ist das hier:

Delphi-Quellcode:
function TTest.MachWasWennTestGroesserNull(test : integer);
begin
  if test = 0 then begin
    exit;
  end;
  ....viele geschachtelte If's
end;
IMHO oft üersichtlicher als einen ohnehin schon relativ tiefen If-Baum noch eine Ebene tiefer zu schieben.

Sanchez 11. Mai 2005 07:17

Re: Break/Exit verwenden?
 
Zitat:

Zitat von Pseudemys Nelsoni
(While-Schleife kommt hier nicht in Frage, auch wenn es in _diesem_ Beispiel möglich wäre)

Warum eigentlich?

Pseudemys Nelsoni 11. Mai 2005 07:20

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:
function TTest.MachWasWennTestGroesserNull(test : integer);
begin
  if test <> 0 then
  begin
    ....viele geschachtelte If's
  end;
end;
hinkriegen würde.

Sanchez 11. Mai 2005 07:28

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.
Seite 1 von 2  1 2      

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