Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1709
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von fliegermichl »

Hallo,

ich habe eben einen C Quellcode nach Pascal übesetzt. In C (oder auch z.B. PHP) gibt es den ? Operator.

Code: Alles auswählen

int schwarz = 1;
int weiss = -1;

int getcolor(int maxOrMin) {
 return maxOrMin?schwarz:weiss;
}
Die Funktion liefert abhängig vom Wert im Parameter maxOrMin entweder den ersten oder den zweiten Wert.
In Pascal würde man es etwa so schreiben:

Code: Alles auswählen

const 
 schwarz = 1;
 weiss = -1;

function getcolor(maxOrMin : boolean) : Integer;
begin
  if maxOrMin then
    Result := schwarz
  else
    Result := weiss;
end;
Mir gefällt die kompakte Schreibweise in der C Version zumal man dieses Konstrukt direkt auch als Parameter für einen Funktionsaufruf verwenden kann.

Warf
Beiträge: 2237
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von Warf »

Seit Delphi 13 gibt es dort if-then-else:

Code: Alles auswählen

s := if condition then 'true' else 'false';

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1709
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von fliegermichl »

Danke, das scheint aber in Freepascal nicht zu gehen.
Beispiel:

Code: Alles auswählen

 ShowMessage(if CheckBox1.Checked then 'true' else 'false');
Fehlermeldung: unit1.pas(35,15) Error: Illegal expression

Benutzeravatar
theo
Beiträge: 11070
Registriert: Mo 11. Sep 2006, 19:01

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von theo »

Es gibt noch IfThen in den units Strutils und Math:

Code: Alles auswählen

  Caption:=IfThen(CheckBox1.Checked , 'a', 'b');    
Etwas merkwürdig imho...

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1709
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von fliegermichl »

theo hat geschrieben: Do 20. Nov 2025, 18:33 Es gibt noch IfThen in den units Strutils und Math:

Code: Alles auswählen

  Caption:=IfThen(CheckBox1.Checked , 'a', 'b');    
Etwas merkwürdig imho...
Danke!
Ja, als Funktion kann man das natürlich so implementieren.

wp_xyz
Beiträge: 5315
Registriert: Fr 8. Apr 2011, 09:01

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von wp_xyz »

fliegermichl hat geschrieben: Do 20. Nov 2025, 18:58
theo hat geschrieben: Do 20. Nov 2025, 18:33 Es gibt noch IfThen in den units Strutils und Math:

Code: Alles auswählen

  Caption:=IfThen(CheckBox1.Checked , 'a', 'b');    
Etwas merkwürdig imho...
Danke!
Ja, als Funktion kann man das natürlich so implementieren.
Aber aufpassen: Sowohl der true- als auch der false-Fall werden ausgewertet. Das Folgende resultiert in einer Division durch 0, obwohl man gerade diese vermeiden möchte:

Code: Alles auswählen

uses
  Math;

function Kehrwert(x: Double): Double;
begin
  Result := IfThen(x <> 0, 1.0/x, NaN);
end;
Mit dem klassischen

Code: Alles auswählen

if x <> 0 then
  Result := 1.0/x
else
  Result := NaN;
passiert das nicht...

Benutzeravatar
theo
Beiträge: 11070
Registriert: Mo 11. Sep 2006, 19:01

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von theo »

Warf hat geschrieben: Do 20. Nov 2025, 18:15 Seit Delphi 13 gibt es dort if-then-else:

Code: Alles auswählen

s := if condition then 'true' else 'false';
Gibt es eine FPC Version oder eine Einstellung, womit dieser ternäre Auswahloperator funktioniert?

Warf
Beiträge: 2237
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von Warf »


Benutzeravatar
theo
Beiträge: 11070
Registriert: Mo 11. Sep 2006, 19:01

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von theo »

Warf hat geschrieben: Do 20. Nov 2025, 20:48 Vielleicht irgendwann
OK, Danke.
Das ist "In Arbeit", soweit ich sehe.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7003
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von af0815 »

theo hat geschrieben: Do 20. Nov 2025, 21:34
Warf hat geschrieben: Do 20. Nov 2025, 20:48 Vielleicht irgendwann
OK, Danke.
Das ist "In Arbeit", soweit ich sehe.
Hat einen Zug bekommen, seit es auch in den Ankündigungen von Delphi drinnen war.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Warf
Beiträge: 2237
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Gibt es in Pascal ein Äquivalent zum ? Operator in C?

Beitrag von Warf »

theo hat geschrieben: Do 20. Nov 2025, 21:34 OK, Danke.
Das ist "In Arbeit", soweit ich sehe.
Wie das halt bei merge requests gegen den FPC läuft, man stellt einen und dann darf man mehrere feedback runden machen wo man ein paar Monate, manchmal auch Jahre bis man seine Antworten bekommt

Antworten