Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - If Abfrage


martin300 - Do 14.08.08 15:01
Titel: If Abfrage
Hallo,

ist es bei folgender Beispielfunktion möglich,


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. - Do 14.08.08 15:05

Eine Schleife [http://www.if-schleife.de] gibt es in Deinem Code nicht ;-)

Aber Du kannst eine Prozedur oder Funktion mittels exit verlassen.


mkinzler - Do 14.08.08 15:16

Aber was spricht gegen das else?


Hack Gott - Do 14.08.08 15:20
Titel: Re: If Abfrage
user profile iconmartin300 hat folgendes geschrieben:
Hallo,

ist es bei folgender Beispielfunktion möglich,


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 ;-))

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;


martin300 - 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 - Do 14.08.08 15:25

Exit; ist länger als else :lol:


Tilman - 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:


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.


Hidden - 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?


@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,


martin300 - 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 - Do 14.08.08 15:54

Ja das ist in Delphi wirklich anders. Eine andere Variante bietet sich an, wenn man mehrere Bedinungen hat:


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;