Autor Beitrag
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Do 14.08.08 15:01 
Hallo,

ist es bei folgender Beispielfunktion möglich,

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function Functiontest.plus(value: Integer; value1: Integer):Integer;
begin

  if (value < 10then
  begin
    result:= value + value1 + 1000;
  end;

  result:= value + value1 + 2000;
end;


wenn die if Abfrage true ist das erste Ergebnis zurück zu liefern und dann
aus der Schleife auszusteigen, ohne es mit einem else zu machen.

Dh. mehrere Abfragen hintereinander und beim ersten Result das zutrifft, soll die
Funktion beendet werden.
Danke.

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 14.08.08 15:05 
Eine Schleife gibt es in Deinem Code nicht ;-)

Aber Du kannst eine Prozedur oder Funktion mittels exit verlassen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 14.08.08 15:16 
Aber was spricht gegen das else?

_________________
Markus Kinzler.
Hack Gott
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 409

Windows Vista
Delphi 2005 Personal, Delphi 7
BeitragVerfasst: Do 14.08.08 15:20 
user profile iconmartin300 hat folgendes geschrieben:
Hallo,

ist es bei folgender Beispielfunktion möglich,

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function Functiontest.plus(value: Integer; value1: Integer):Integer;
begin

  if (value < 10then
  begin
    result:= value + value1 + 1000;
  end;

  result:= value + value1 + 2000;
end;


wenn die if Abfrage true ist das erste Ergebnis zurück zu liefern und dann
aus der Schleife auszusteigen, ohne es mit einem else zu machen.

Dh. mehrere Abfragen hintereinander und beim ersten Result das zutrifft, soll die
Funktion beendet werden.
Danke.

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt


Ja natürlich, das ganze sieht dan so aus: (noch ein bisschen schöner gemacht ;-))
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function Functiontest.plus(value, value1: Integer):Integer;
begin
  if (value < 10then
  begin
    result:= value + value1 + 1000;
    exit;
  end;
  result:= value + value1 + 2000;
end;

_________________
"Je mehr Käse, desto mehr Löcher; Je mehr Löcher, desto weniger Käse. Daraus folgt: Je mehr Käse desto weniger Käse!"
martin300 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Do 14.08.08 15:23 
user profile iconmkinzler hat folgendes geschrieben:
Aber was spricht gegen das else?


Meine Faulheit. Wenn es eine einfachere Möglichkeit gibt, bei der weniger zu tippen ist,
würde ich es machen.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Do 14.08.08 15:25 
Exit; ist länger als else :lol:

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 14.08.08 15:28 
user profile iconmartin300 hat folgendes geschrieben:
user profile iconmkinzler hat folgendes geschrieben:
Aber was spricht gegen das else?


Meine Faulheit. Wenn es eine einfachere Möglichkeit gibt, bei der weniger zu tippen ist,
würde ich es machen.


Na dann warum nicht so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function Functiontest.plus(value: Integer; value1: Integer):Integer;
begin
  if (value < 10then
    result:= value + value1 + 1000 else
    result:= value + value1 + 2000;
end;


Mit dem gesparten begin und end ist das weniger code als exit ;)

Exit, continue und break gelten genauso wie goto als schlechter Stil, weil sie den Quellcode weniger übersichtlich machen. Trotzdem sollte man ihre Funktion kennen, weil man von Fall zu Fall damit elegant optimieren kann - in diesem Fall ist es aber wohl eigentlich* fehl am Platz ;)

*) wobei natürlich jeder Proggen darf wie er will.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Do 14.08.08 15:34 
Hi,

Mit 'Exit;' machst du dir da keine Freude; ist keine Logische Programmstruktur und besonders bei Lehrern, etc. kommts nihct gut an ;)

Du kommst wahrscheinlich nativ aus einer Sprache, in der 'return' auch gleich ein Exit enthält?

ausblenden @Das hier:
1:
2:
3:
4:
5:
6:
function Functiontest.plus(value: Integer; value1: Integer):Integer;
begin
  if value < 10 then
    result := value + value1 + 1000
  else result := value + value1 + 2000;
end;

Imho hast du hiermit die Richtlinien, finde ich ein kleines Bisschen übersichtlicher. Um einen If-Term muss in delphi übrigens keine Klammer, nervt mich ehrlichgesagt immer etwas bei anderen, wo es mit while und vor allem for(zum Kotzen :D) wie ein Makro oder eine Funktion behandelt wird..

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
martin300 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Do 14.08.08 15:44 
Wollte ein Beispiel geben, das sich gut beschreiben lässt. Mein Code
hat mehrere Abfragen und da bei Java automatisch abgebrochen wird, musste
ich den Grund erst finden, warum es in Delphi nicht so ist.
Danke für die Antworten.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 14.08.08 15:54 
Ja das ist in Delphi wirklich anders. Eine andere Variante bietet sich an, wenn man mehrere Bedinungen hat:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function Functiontest.plus(value: Integer; value1: Integer):Integer;
begin
  result := value + value1 + 2000;

  if value < 10 then
    result := value + value1 + 1000;
  if bla then result := blub;
  if ..
end;

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)