DelphiにはC#のような三項演算子がないことを理解しています。つまり、?:
では、この関数呼び出しをどのように表現するのが最善でしょうか?そこにある最もクリーンな方法は何ですか?
別の関数を書く代わりに使用できるコードがそこにあれば、とてもいいでしょうか?そうでない場合、それの最も効率的および/または最もクリーンなコード表現は何ですか?
もちろん使用できます
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;
三項演算子に最も近いものは次のとおりです。
if (condition) then <statement> else <statement>;
私が覚えている限り、Delphiには三項演算子はありません。
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;