If expression
(* | |
* If expression - ternary operator like C. | |
* | |
* HOW TO USE | |
* 1. uses uIfExp; | |
* 2. IfExp<TYPE>(BooleanValue) - TRUE_VALUE or FALSE_VALUE | |
* or | |
* IfExp<TYPE>(BooleanValue).ThenElse(TRUE_VALUE, FALSE_VALUE); | |
* | |
* EXAMPLE | |
* Writeln(IfExp<String>(1 > 0) - 'true' or 'false'); | |
* Writeln(IfExp<Integer>(1 > 3) - 100 or -100); | |
* Writeln(IfExp<Double>('a' > 'c').ThenElse(0.1, 0.2)); | |
* | |
* Programmed by HOSOKAWA Jun / twitter: @pik | |
*) | |
unit uIfExp; | |
interface | |
uses | |
System.Rtti; | |
type | |
IfExp<T> = record | |
private class var | |
FValue: Boolean; | |
FThen: TValue; | |
public | |
class operator Implicit(const AValue: Boolean): IfExp<T>; | |
class operator Subtract( | |
const ALeft: IfExp<T>; | |
const ARight: TValue): IfExp<T>; | |
class operator BitwiseOr(const ALeft: IfExp<T>; const ARight: TValue): T; | |
class function ThenElse(const AThen, AElse: T): T; static; inline; | |
end; | |
implementation | |
{ IfThen<T> } | |
class operator IfExp<T>.BitwiseOr( | |
const ALeft: IfExp<T>; | |
const ARight: TValue): T; | |
begin | |
if (FValue) then | |
Result := FThen.AsType<T> | |
else | |
Result := ARight.AsType<T>; | |
end; | |
class operator IfExp<T>.Implicit(const AValue: Boolean): IfExp<T>; | |
begin | |
FValue := AValue; | |
end; | |
class operator IfExp<T>.Subtract( | |
const ALeft: IfExp<T>; | |
const ARight: TValue): IfExp<T>; | |
begin | |
FThen := ARight; | |
end; | |
class function IfExp<T>.ThenElse(const AThen, AElse: T): T; | |
begin | |
if (FValue) then | |
Result := AThen | |
else | |
Result := AElse; | |
end; | |
end. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment