Jak nazywa się taka konstrukcja: (warunek)?a:b

0

M.in. C++ istnieje taka konstrukcja:
(warunek)?prawda:fałsz
I mam dwa pytania:
1.Czy ma to może jakąś swoją nazwę?
2.Czy istnieje może jakiś odpowiednik w Pascalu (poza if'em oczywiście :P)?

0

Ten operator nazywa się operatorem wybodu

0

I nie ma go w Pascalu.

0

Tutaj napisałem odpowiednik dla Delphi:

Function iif(Condition, vTrue, vFalse: Variant; vNot: Boolean=False): Variant;
Begin
 Result := null;
 Case (VarType(Condition) and VarTypeMask) Of
  varSmallint, varInteger, varByte, varSingle, varCurrency, varLongWord, varWord, varInt64: if (Condition = 1) Then Result := vTrue Else Result := vFalse;
  varBoolean: if (Condition) Then Result := vTrue Else Result := vFalse;
  varString: if (LowerCase(Condition) = 'true') Then Result := vTrue Else Result := vFalse;
  else raise Exception.Create('iif unknown type');
 End;
 if (vNot) Then
  if (Result = vTrue) Then
   Result := vFalse Else
   Result := vTrue;
End;

Przykład działania:

Function CzyParzysta(N: Integer): Boolean;
Begin
 Result := iif(n and 1, false, true);
End;
1

Albo inna nazwa: operator trójargumentowy

0

Spotkałem też wyrażenie warunkowe ;]

0

Nie do końca jest to odpowiednik, bo w przypadku klasycznego operatora, operandy obliczane są leniwie, w zależności od spełnienia warunku:

int x() {
    cout << 'x';
    return 1;
}

int y() {
    cout << 'y';
    return 2;
}

int main() {
    cout << (true ? x() : y()) << endl;
    cout << (false ? x() : y()) << endl;
}

Wynik:

x1
y2
function x: Integer;
begin
    write('x');
    result := 1;
end;

function y: Integer;
begin
    write('y');
    result := 2;
end;

begin
    writeln(iif(true, x, y));
    writeln(iif(false, x, y));
end.

Wynik:

yx1
yx2
0

Znam język (Clipper), który nie ma operatora trójargumentowego, ale ma funkcję if z leniwą ewaluacją.

x:=0
y:=if(x==0,3,5/x)
//y=3

1 użytkowników online, w tym zalogowanych: 0, gości: 1