Delphi - эквивалентно тройному оператору С#?
Возможный дубликат:
Есть ли какой-либо условный оператор в Delphi?
Я понимаю, что у Delphi нет тернарного оператора, как на С#.
т.е. ?:
Итак, как лучше всего представить этот вызов функции? Какой самый чистый метод?
Было бы очень приятно, если бы там был какой-то код, который можно использовать INSTEAD для написания отдельной функции? Если нет, то каково наиболее эффективное и/или чистое его представление?
Ответы
Ответ 1
Конечно, вы можете использовать
IfThen(SomeBooleanExpression, IfTrueReturnValue, IfFalseReturnValue)
где возвращаемые значения являются числовыми (uses Math
) или string (uses StrUtils
). Но обратите внимание, что это будет оценивать оба аргумента во всех случаях - нет ленивой оценки, поэтому она не так эффективна, как оператор ?:
в С#, где оценивается только правый операнд.
Итак, вы не можете сделать
y := IfThen(x <> 0, 1/x, 0)
Лучше всего придерживаться обычного
if x <> 0 then y := 1/x else y := 0;
Ответ 2
Ближайший к троичному оператору вы можете добраться:
if (condition) then <statement> else <statement>;
Насколько я помню, в Delphi нет троичного оператора.
Ответ 3
Попробуйте Iff от джедая:
function Iff(const Condition: Boolean; const TruePart: string; const FalsePart: string): string; overload;
function Iff(const Condition: Boolean; const TruePart: Char; const FalsePart: Char): Char; overload;
function Iff(const Condition: Boolean; const TruePart: Byte; const FalsePart: Byte): Byte; overload;
function Iff(const Condition: Boolean; const TruePart: Integer; const FalsePart: Integer): Integer; overload;
function Iff(const Condition: Boolean; const TruePart: Cardinal; const FalsePart: Cardinal): Cardinal; overload;
function Iff(const Condition: Boolean; const TruePart: Float; const FalsePart: Float): Float; overload;
function Iff(const Condition: Boolean; const TruePart: Boolean; const FalsePart: Boolean): Boolean; overload;
function Iff(const Condition: Boolean; const TruePart: Pointer; const FalsePart: Pointer): Pointer; overload;
function Iff(const Condition: Boolean; const TruePart: Int64; const FalsePart: Int64): Int64; overload;
function Iff(const Condition: Boolean; const TruePart: Variant; const FalsePart: Variant): Variant; overload;