Подтвердить что ты не робот

Delphi - эквивалентно тройному оператору С#?

Возможный дубликат:
Есть ли какой-либо условный оператор в Delphi?

Я понимаю, что у Delphi нет тернарного оператора, как на С#. т.е. ?:

Итак, как лучше всего представить этот вызов функции? Какой самый чистый метод?

Было бы очень приятно, если бы там был какой-то код, который можно использовать INSTEAD для написания отдельной функции? Если нет, то каково наиболее эффективное и/или чистое его представление?

4b9b3361

Ответ 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;