web-dev-qa-db-ja.com

Delphi-C#の三項演算子に相当しますか?

重複の可能性:
Delphiに条件演算子はありますか、またはこれからありますか?

DelphiにはC#のような三項演算子がないことを理解しています。つまり、?:

では、この関数呼び出しをどのように表現するのが最善でしょうか?そこにある最もクリーンな方法は何ですか?

別の関数を書く代わりに使用できるコードがそこにあれば、とてもいいでしょうか?そうでない場合、それの最も効率的および/または最もクリーンなコード表現は何ですか?

28
Simon

もちろん使用できます

IfThen(SomeBooleanExpression, IfTrueReturnValue, IfFalseReturnValue)

ここで、戻り値は数値(uses Math)または文字列(uses StrUtils)です。ただし、これによりすべての場合に両方の引数が評価されることに注意してください。遅延評価がないため、右のオペランドのみが評価されるC#の?:演算子ほど効率的ではありません。

だからあなたはできません

y := IfThen(x <> 0, 1/x, 0)

一番いいのは普通に固執することです

if x <> 0 then y := 1/x else y := 0;
40

三項演算子に最も近いものは次のとおりです。

if (condition) then <statement> else <statement>;

私が覚えている限り、Delphiには三項演算子はありません。

4
Unmanned Player

Jediの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;
2
CloudyMarble