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
2
To jest operator warunkowy http://pl.wikipedia.org/wiki/Operator_warunkowy
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