Last active
June 23, 2018 09:12
-
-
Save freeonterminate/7b2881ac82388d900855 to your computer and use it in GitHub Desktop.
If expression
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(* | |
* 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