Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#9

AW: Anfängerfrage: Verknüpfungen

  Alt 16. Dez 2016, 13:34
Kennt Dein Delphi schon IfThen?

Wenn nein:
Delphi-Quellcode:
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer): Integer;
begin
  if AValue then Result := ATrue else Result := AFalse;
end;
Delphi-Quellcode:
begin
  b := ifThen(a = 1,2,b);
  c := ifThen(a = 1,3,c);
end;
Die Variante von DeddyH etwas ausgebaut:
Delphi-Quellcode:
procedure ValuesByCondition(ACondition: Boolean;
  var AWert1 : Integer; const ADefault1 : Integer;
  var AWert2 : Integer; const ADefault2 : Integer);
begin
  if not ACondition then exit;
  AWert1 := ADefault1;
  AWert2 := ADefault2;
end;

procedure TFormTest.ButtonTestClick(Sender: TObject);
var
  a, b, c: integer;
begin
  a := 0;
  b := 0;
  c := 0;
  ValuesByCondition(a = 1, b, 2, c, 3);
  ShowMessage(Format('a: %d, b: %d, c: %d', [a, b, c]));
  a := 1;
  ValuesByCondition(a = 1, b, 2, c, 3);
  ShowMessage(Format('a: %d, b: %d, c: %d', [a, b, c]));
end;
Dadurch dann auch für andere Werte als "nur" 1, 2 und 3 als Einzeiler einsetzbar.
Delphi-Quellcode:
procedure TFormTest.ButtonTestClick(Sender: TObject);
var
  a, b, c, z: integer;
begin
  a := 0;
  b := 47;
  c := 11;
  ValuesByCondition(a = 1, b, 2, c, 3); // keine Änderung, Bedingung nicht erfüllt
  ShowMessage(Format('a: %d, b: %d, c: %d', [a, b, c]));
  a := 1;
  ValuesByCondition(a = 1, b, 2, c, 3); // Änderung, Bedingung erfüllt
  ShowMessage(Format('a: %d, b: %d, c: %d', [a, b, c]));
  a := 1;
  ValuesByCondition(a = 1, b, b * 2, c, c - 1); // mit Ergebnis von Rechenoperationen
  ShowMessage(Format('a: %d, b: %d, c: %d', [a, b, c]));
  z := 2;
  ValuesByCondition(z = 2, b, c, c, b); // Wertetausch
  ShowMessage(Format('z: %d, b: %d, c: %d', [z, b, c]));
  z := 0;
  ValuesByCondition(c * 7 = 28, b, c, c, b); // Wertetausch bei zutreffendem Ergebnis einer Rechenoperation
  ShowMessage(Format('c*7: %d, b: %d, c: %d', [c*7, b, c]));
end;

Geändert von nahpets (16. Dez 2016 um 13:34 Uhr) Grund: Schreibfehler :-(
  Mit Zitat antworten Zitat