2010-11-06 22 views
5

आप पहली जगह में त्रिगुट सशर्त ऑपरेटर नफरत है, वहाँ जवाब देने के लिए की आवश्यकता नहीं;)त्रिगुट (सशर्त) ऑपरेटर और शैली

मैं आमतौर पर इस तरह एक काम अभिव्यक्ति के साथ मिलकर में इस्तेमाल देखें:

var foo = (some_condition) ? then_code : else_code; 

हालांकि, मैं इसका इस्तेमाल करने की तरह सरल कोड बदलने के लिए करना चाहते हैं:

if(some_condition) { 
    do_something_simple; 
} else { 
    do_something_else; 
} 

और बदले कार्य करें:

(some_condition) ? do_something_simple : do_something_else; 

मुझे जावास्क्रिप्ट में ऐसा करने की संभावना है। उपर्युक्त में यह अपरिभाषित हो जाता है इसलिए इसे असाइनमेंट की आवश्यकता नहीं होती है। मुझे बचाया गया स्थान पसंद है लेकिन आश्चर्य है कि लोग इस प्रकार के उपयोग पर क्या सोचते हैं, फिर भी, मैं आमतौर पर केवल असाइनमेंट के साथ उपयोग की जाने वाली टर्नरी देखता हूं।

संपादित करें: मैंने "छिपाने के इरादे" के बारे में जवाब देने वाले उत्तरों को देखा है। यद्यपि शास्त्रीय रूप से अभिव्यक्तियों में प्रयोग किया जाता है, फिर भी यह अभिव्यक्ति में उपयोग करने के इरादे को और कैसे छुपा रहा है? खासकर एक गतिशील भाषा में जहां कोई जगह पर टर्नरी ऑपरेटरों का उपयोग देख सकता है?

+0

डुप्लिकेट प्रश्न। कृपया पहले पूछे गए और उत्तर दिए गए प्रश्नों को हमेशा देखें। यहां लिंक है, देखें कि क्या यह मदद करता है: http://stackoverflow.com/questions/3622244/full-if-else-statement-vs-conditional-operator –

+2

युक्ति: ध्यान दें कि इस विशेष टर्नरी ऑपरेटर को आमतौर पर कहा जाता है सशर्त ऑपरेटर। एक "टर्नरी" ऑपरेटर केवल 3 ऑपरेंड के साथ एक ऑपरेटर है, इसलिए शब्द "टर्नरी" है। कई टर्नरी ऑपरेटर नहीं हैं, लेकिन उन भाषाओं में जिनमें एकाधिक हैं, सशर्त एक उनमें से एक है। –

+0

@ माझहर: यह प्रश्न अभिव्यक्ति-स्तर की पसंद के रूप में सामान्य, स्वीकार्य तरीके से '?:' का उपयोग करने के बारे में है। यह 'if-else' को बदलने के लिए सक्रिय साइड इफेक्ट्स करने के लिए'?: 'के दुरुपयोग के बारे में है। व्यक्तिगत रूप से मैं इस अभ्यास से नफरत करता हूं। – bobince

उत्तर

3

सशर्त ऑपरेटर सामान्य रूप से अभिव्यक्तियों में उपयोग किया जाना चाहिए - मूल्य उत्पादन अभिव्यक्ति - और 'if/then/else' कथन के प्रतिस्थापन के रूप में सबसे अच्छा उपयोग नहीं किया जाना चाहिए। कभी-कभी इस्तेमाल किया जाता है, कोई विशेष समस्या नहीं होगी; व्यवस्थित रूप से प्रयोग किया जाता है, मुझे लगता है कि यह पाठकों से कोड के इरादे को छुपाएगा।

+0

इसलिए कोई तकनीकी कारण नहीं है कि इसका उपयोग क्यों नहीं किया जा सकता है। – dewd

+0

वर्चुअल एक्सप्रेशन का मुख्य मान (1), जिसमें सशर्त अभिव्यक्ति का मुख्य मूल्य यह है कि वे ** ** इस तरह से बनाते हैं कि सशर्त बयान नहीं है, और (2) एक अनिवार्य शैली है, जिसमें अभिव्यक्ति हमेशा आवश्यक नहीं होती है, और कथन अक्सर पर्याप्त होंगे। – houthakker

2

यह मेरी निजी पसंद है:

इस मामले में, मैं इसे "मशीन के लिए नहीं, कोड लोगों को पढ़ने के लिए लिखा है" सोच में गिर जाता है लगता है। चूंकि अधिकांश लोग if then else इस तरह से नहीं लिखते हैं, यह भ्रम पैदा कर सकता है, कोड को समझने के लिए समय बढ़ा सकता है, और संभवतया बग पेश कर सकता है - अगर किसी ने इसे देखा और सोचा, तो किसी भी चीज़ के लिए कोई असाइनमेंट नहीं है, "छोड़ दिया जाना चाहिए" कोड और चलो इसे हटा दें, फिर कोड साफ़ करें बग परिचय बन जाता है।


से उद्धरित: के लिए लोगों को पढ़ने के लिए, और केवल संयोग से मशीनों पर अमल करने के लिए कार्यक्रम लिखा जाना चाहिए।

- "संरचना और कंप्यूटर प्रोग्राम की व्याख्या" Abelson और Sussman

चार्ली मार्टिन द्वारा से कहा Is Code For Computers or for People?:

कंप्यूटर यह नहीं चलता है, तो यह टूटा हुआ है। अगर लोग इसे पढ़ नहीं सकते हैं, तो यह टूट जाएगा। शीघ्र।

और मुझे लगता है कि हाँ, मशीन को समझने के लिए कोड लिखा गया है (और ठीक से चलाएं), और लोगों के समझने के लिए भी महत्वपूर्ण है। (जब तक कि यह परामर्श शुल्क अर्जित करने के लिए जानबूझकर समझना मुश्किल नहीं है, लेकिन वे बाद में या अगली परियोजना के लिए किसी और को किराए पर ले सकते हैं, या जानबूझकर नौकरी सुरक्षा के लिए समझने के लिए लिखे गए हैं कि अगर लोग आपके कोड को अच्छी तरह समझ नहीं सकते हैं, तो वे ' आग लगने से आप अन्य लोगों से डर सकते हैं कोड को बनाए नहीं रख सकते ... शायद किसी चीज के लिए 2 पक्ष हैं ... मैं इस तरह के अधिक से अधिक मामलों को देख रहा हूं)

+0

वाह, अगर वे इसे सोचने के लिए हटा रहे थे तो यह "बाएं ओवर" कोड है जो बहुत आक्रामक आईएमओ प्रतीत होता है। उद्धरण दिलचस्प है लेकिन मानता है कि प्रस्तावित उपयोग वास्तव में कोड के पाठक को भ्रमित कर रहा है। हालांकि, यह तथ्य है कि यह वास्तव में अधिक पठनीय बनाने के लिए कम लाइनें है? सुनिश्चित नहीं है;) – Rob

+0

एचएम ... कम लाइन जरूरी नहीं है कि इसे और अधिक पठनीय बनाएं। उदाहरण के लिए, 35 लाइनों वाला एक प्रोग्राम 3 लाइनों की तुलना में अधिक जटिल लग सकता है, लेकिन उनमें से कुछ कोड-गोल्फ 1-लाइनर को समझना बहुत मुश्किल हो सकता है। –

0

सवाल मूर्खतापूर्ण है क्योंकि आप जावास्क्रिप्ट के बारे में बात कर रहे हैं जो अजीब चीजों की अनुमति देता है।

क्लासिक प्रोग्रामिंग भाषा में टर्नरी सशर्त ऑपरेटर के लिए आवश्यक है कि दोनों मामले अभिव्यक्तियां हों, बयान न दें। इस तरह आप इसे बूलियन की स्थिति के अनुसार दो अभिव्यक्तियों के बीच चुनने के लिए उपयोग कर सकते हैं, लेकिन यदि सामान्य हो तो सामान्य नहीं।

जावास्क्रिप्ट जैसी भाषा में यह अंतर गायब हो जाता है क्योंकि एक कथन वास्तव में एक मूल्य देता है ताकि आप टर्नरी का उपयोग कर सकें और केवल अपरिभाषित आपके कथन द्वारा लौटाए गए मूल्य को त्याग दें।

मेरे दृष्टिकोण से, जो अन्य प्रोग्रामिंग भाषा पर अधिक रहता है, इससे आप अंतरिक्ष को बचाने पर भी भ्रम पैदा कर सकते हैं लेकिन मुझे लगता है कि यह वरीयता का मामला है। बस इसका उपयोग न करें क्योंकि कुछ प्रोग्रामिंग भाषा इस तरह के टर्नरी ऑपरेटर के उपयोग की अनुमति देती है!

+0

> मूर्खतापूर्ण - मुझे लगता है कि यही कारण है कि मैंने इसे क्यों पूछा। मुझे इसे अधिक क्लासिक भाषाओं में देखने के लिए उपयोग नहीं किया जाता है, लेकिन हाँ, इसे जेएस में अनुमति है। – Rob

0

टर्नरी ऑपरेटर परिपक्व/स्थिर कार्यक्रमों के लिए अच्छा है, लेकिन लगातार पर्यावरण में नहीं। मान लीजिए कि आपको किसी भी शाखा में कुछ अतिरिक्त कोड जोड़ना होगा - यदि आपके पास/तो/else वाक्यविन्यास है तो यह बहुत आसान है।

+0

मुझे नहीं लगता कि परिपक्व के साथ इसके साथ कुछ लेना देना है। मैं तर्क दूंगा कि यह बहुत ही सरल परिस्थितियों के लिए अच्छा है आईएमओ – Rob

+0

कुछ अप्रत्याशित समय पर विस्तार करने के लिए बहुत ही सरल स्थिति की आवश्यकता हो सकती है। – Thevs

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