Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Anfängerfrage: Verknüpfungen (https://www.delphipraxis.net/191175-anfaengerfrage-verknuepfungen.html)

derseitzer 16. Dez 2016 09:28

Delphi-Version: 5

Anfängerfrage: Verknüpfungen
 
ich würde gerne fragen, ob es eine Möglichkeit gibt, das hier:
if a=1 then
begin
b:=2;
c:=3;
end;

mit weniger Zeilen zu schreiben..
das hier zum Beispiel ist leider nicht möglich:

if a=1 then
b:=2 and c:=3;

Hintergrund: ich muss diesen oberen code sehr oft implementieren und die ganzen "begins" und "ends" sind mir von der Übersicht her ein zu großer Nachteil..

sakura 16. Dez 2016 09:36

AW: Anfängerfrage: Verknüpfungen
 
Höchstens mit:
Delphi-Quellcode:
procedure ABC;
var
  A,B,C: Integer;

  procedure Check();
  begin
    if A = 1 then
    begin
      B := 2;
      C := 3;
    end;
  end;
begin
  ...
  Check;
  ...
  ...
  Check;
  ...
  ...
  Check;
  ...
end;
...:cat:...

derseitzer 16. Dez 2016 09:58

AW: Anfängerfrage: Verknüpfungen
 
ich suche eher sowas wie dieses "and" :) so klappt das leider nicht, weil der befehl nicht immer der gleiche ist.. (andere bedingungen andere Parameter etc.)

HolgerX 16. Dez 2016 09:58

AW: Anfängerfrage: Verknüpfungen
 
oder ganz einfach in einer Zeile ;)

Delphi-Quellcode:
if a=1 then begin b:=2; c:=3; end;

Nicht schön, aber geht

DeddyH 16. Dez 2016 10:02

AW: Anfängerfrage: Verknüpfungen
 
Oder in der Richtung:
Delphi-Quellcode:
procedure ValuesByCondition(ConditionValue: integer; var First, Second: integer);
begin
  if ConditionValue = 1 then
    begin
      First := 2;
      Second := 3;
    end;
end;

procedure TFormTest.ButtonTestClick(Sender: TObject);
var
  a, b, c: integer;
begin
  a := 0;
  b := 0;
  c := 0;
  ValuesByCondition(a, b, c);
  ShowMessage(Format('a: %d, b: %d, c: %d', [a, b, c]));
  a := 1;
  ValuesByCondition(a, b, c);
  ShowMessage(Format('a: %d, b: %d, c: %d', [a, b, c]));
end;

Der schöne Günther 16. Dez 2016 10:03

AW: Anfängerfrage: Verknüpfungen
 
Delphi und
Zitat:

Zitat von derseitzer (Beitrag 1356327)
mit weniger Zeilen zu schreiben..

passt nie sonderlich gut zusammen :twisted:

sakura 16. Dez 2016 11:33

AW: Anfängerfrage: Verknüpfungen
 
Zitat:

Zitat von derseitzer (Beitrag 1356335)
ich suche eher sowas wie dieses "and" :) so klappt das leider nicht, weil der befehl nicht immer der gleiche ist.. (andere bedingungen andere Parameter etc.)

Dann hätte ich Dir eine kompaktere Lösung genannt, geht aber nicht, und würde den Code auch nicht wirklich lesbarer machen.

...:cat:...

Delphi-Laie 16. Dez 2016 11:47

AW: Anfängerfrage: Verknüpfungen
 
Zitat:

Zitat von derseitzer (Beitrag 1356327)
die ganzen "begins" und "ends" sind mir von der Übersicht her ein zu großer Nachteil..

Dann ist Pascal wohl nicht die richtige Programmiersprache für Dich.

Daß sich jemand über diese Blockgrenzschlüsselwörter mockiert, lese ich das erste Mal in meinen inzwischen 11 Jahren, die ich im Internet wegen Pascal / Delphi aktiv bin.

Immerhin sind diese Schlüsselwörter fett markiert.

Diese Blockbildung findet eben nicht "von innen" über and-Verknüpfungen (was so auch nicht funktioniert, so können nur boolesche/logische Ausdrücke, aber keine Anweisungen verknüpft werden), sondern nur "von außen" über begrenzende Schlüsselwörter statt. Warum letzteres übersichtlicher als ersteres sein soll, verschließt sich mir.

nahpets 16. Dez 2016 12:34

AW: Anfängerfrage: Verknüpfungen
 
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 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