AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Break/Exit verwenden?

Ein Thema von Pseudemys Nelsoni · begonnen am 11. Mai 2005 · letzter Beitrag vom 11. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Break/Exit verwenden?

  Alt 11. Mai 2005, 05:03
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] = 'Bthen
      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
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#2

Re: Break/Exit verwenden?

  Alt 11. Mai 2005, 05:39
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
  Mit Zitat antworten Zitat
Narayana
(Gast)

n/a Beiträge
 
#3

Re: Break/Exit verwenden?

  Alt 11. Mai 2005, 06:27
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] = 'Bthen
    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
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Break/Exit verwenden?

  Alt 11. Mai 2005, 06:56
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Break/Exit verwenden?

  Alt 11. Mai 2005, 06:59
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] = 'Bthen 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
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#6

Re: Break/Exit verwenden?

  Alt 11. Mai 2005, 07:13
@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
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#7

Re: Break/Exit verwenden?

  Alt 11. Mai 2005, 07:15
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.
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#8

Re: Break/Exit verwenden?

  Alt 11. Mai 2005, 07:17
Zitat von Pseudemys Nelsoni:
(While-Schleife kommt hier nicht in Frage, auch wenn es in _diesem_ Beispiel möglich wäre)
Warum eigentlich?
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#9

Re: Break/Exit verwenden?

  Alt 11. Mai 2005, 07:20
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.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#10

Re: Break/Exit verwenden?

  Alt 11. Mai 2005, 07:28
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.
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz