2011-03-09 28 views
20

संभव डुप्लिकेट:
Is there, or is there ever going to be, a conditional operator in Delphi?डेल्फी - सी # के टर्नरी ऑपरेटर के बराबर?

मैं डेल्फी does not के सी # में के रूप में त्रिगुट ऑपरेटर है समझते हैं। i.e. ?:

तो इस फ़ंक्शन कॉल का प्रतिनिधित्व करने के लिए सबसे अच्छा तरीका कैसा है? वहाँ सबसे साफ तरीका क्या है?

बहुत अच्छा होगा अगर वहाँ कोई कोड है जिसका उपयोग अलग-अलग कार्य लिखने के INSTEAD का उपयोग किया जा सकता है? यदि नहीं, तो इसका सबसे कुशल और/या सबसे साफ कोड प्रतिनिधित्व क्या है?

+1

"* * त्रिगुट ऑपरेटर" के रूप में ऐसी कोई चीज नहीं है। एक टर्नरी ऑपरेटर * कोई * ऑपरेटर है जो तीन ऑपरेंड स्वीकार करता है। आप शायद एक विशिष्ट टर्नरी ऑपरेटर, अर्थात् '?:' का जिक्र कर रहे हैं। –

+0

धन्यवाद माइकल, बंद करने के लिए मतदान किया। – Simon

+3

@ एंड्रियास, अगर केवल एक टर्नरी ऑपरेटर है, तो यह * * टर्नरी ऑपरेटर है। हम इसे अपने नाम, सशर्त ऑपरेटर द्वारा भी कॉल कर सकते हैं। इसी प्रकार, केवल एक ही व्यक्ति है जिसने इस प्रश्न पर पहली टिप्पणी पोस्ट की है। हम या तो उसे उस व्यक्ति को बुला सकते हैं जिसने इस प्रश्न पर पहली टिप्पणी पोस्ट की है, या हम उसे अपने नाम, एंड्रियास द्वारा बुला सकते हैं। –

उत्तर

35

बेशक आप

IfThen(SomeBooleanExpression, IfTrueReturnValue, IfFalseReturnValue) 

जहां वापसी मान सांख्यिक (uses Math) या स्ट्रिंग (uses StrUtils) कर रहे हैं का उपयोग कर सकते हैं। लेकिन ध्यान दें कि यह सभी मामलों में दोनों तर्कों का मूल्यांकन करेगा - कोई आलसी मूल्यांकन नहीं है, इसलिए यह सी # में ?: ऑपरेटर जितना कुशल नहीं है, जहां केवल सही ऑपरेंड का मूल्यांकन किया जाता है।

तो तुम ऐसा नहीं कर सकते

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

सबसे अच्छी बात एक साधारण

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

डैन मेरी सभी छोटी 'अगर तब elses' से बचने की उम्मीद कर रहा था :( – Simon

+2

पता नहीं है कि यह अभी भी मामला है, लेकिन अगर इफ्टेन का उपयोग करने की कमी (/ है) है कि सभी भागों का हमेशा मूल्यांकन किया जाता है और आप नहीं कर सकते यदि आप बयान देते हैं तो "सामान्य" के साथ पहुंच उल्लंघन से बचें। आईई 'अगर असाइन किया गया (ए) तो एक्स: = ए। कुछ और एक्स: = ''; ' –

+1

आह, अब देखें कि आपने आलसी मूल्यांकन का उल्लेख किया है, लेकिन इसका उपयोग प्रभाग उदाहरण के रूप में शून्य ... –

3

है निकटतम साथ रहना है:

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

आशा है कि यह मदद करता है। जहां तक ​​मुझे याद है, डेल्फी में कोई टर्नरी ऑपरेटर नहीं है।

+0

क्षमा करें, एक टाइपो था। मुझे डेल्फी में एक टर्नरी ऑपरेटर याद नहीं है। –

2

जेडी से 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; 
+3

हां, यह आरटीएल के 'इफ्टेन' कार्यों का एक "विस्तारित" संस्करण है। लेकिन यह अभी भी पीड़ित है 'ifThen' फ़ंक्शंस के समान समस्या, जैसा कि '?:' –

+0

की तुलना में हां जैसा नहीं है? – Simon

संबंधित मुद्दे