दिलचस्प पोस्ट
एंड्रॉइड: डैरिल = "सच्चा" नहीं डरता, क्या ग़लत है? रिलेशनल डीबी में एक पेड़ की संरचना को स्टोर करने के लिए जाने वाले तरीके क्या हैं? प्रीफलाइट अनुरोध के उत्तर में एक्सेस कंट्रोल चेक पास नहीं होता है एएसपी.नेट पहचान में दावे कैसे जोड़ें I मुझे एक साधारण printf के साथ संकलन त्रुटियां क्यों मिल रही हैं? C ++ 11/14 के मूल्य में एक स्थानीय चरणीय लौटाए जा सकते हैं, जब कोई प्रतिलिपि / चाल शामिल नहीं है, तो रिवर्स वैल्यू के परिणामस्वरूप रॉल्यूवर द्वारा बनाए जा रहे हैं? आईओएस मेमोरी आवंटन – किसी एप्लिकेशन में कितनी मेमोरी का उपयोग किया जा सकता है? एंड्रॉइड कैमरा काम नहीं करेगा startPreview विफल रहता है विज़ुअल स्टूडियो 2013 यूनिट परीक्षणों को नहीं खोजता है जावा में दो स्ट्रिंग के साथ एक्सओआर ऑपरेशन सी ++ स्टडी :: वेक्टर कैसे लागू होता है? रेल 3: alias_method_chain अभी भी प्रयोग किया जाता है? Std :: vector के साथ VBOs कोणीय जेएस में एकाधिक मान (या ऑपरेशन) कैसे फ़िल्टर करें गिट का उपयोग करते समय "त्रुटि: खराब इंडेक्स – घातक: अनुक्रमणिका फ़ाइल भ्रष्ट" को हल करने के लिए कैसे करें

फ़ंक्शन के साथ जावास्क्रिप्ट टर्नरी ऑपरेटर का उदाहरण

मैं jQuery 1.7.1 का उपयोग कर रहा हूँ

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

यहां मूल विवरण दिया गया है:

function updateItem() { $this = $(this); var IsChecked = $this.hasClass("IsChecked"); if (IsChecked == true){ removeItem($this); } else { addItem($this); } } 

टर्नरी ऑपरेटर का उपयोग करते हुए यह एक समान कार्य है:

 function updateItem() { $this = $(this); var IsChecked = $this.hasClass("IsChecked"); (IsChecked == true) ? removeItem($this) : addItem($this); } 

मैं आश्चर्यचकित था क्योंकि सभी उदाहरणों को मैंने देखा था कि वे इस तरह के वैरिएबल की स्थापना कर रहे थे:

 x = (1 < 2) ? true : false; 

मेरा प्रश्न यह है कि क्या यह "सामान्य" उपयोग है और क्या यह जावास्क्रिप्ट के अधिकांश संस्करणों में काम करेगा? यह कहाँ विफल होगा? इसके लिए अन्य कम स्पष्ट उपयोग हैं?

अद्यतन – "असली दुनिया" सलाह के लिए धन्यवाद !!!

मैं इसे अपने फ़ंक्शन के रूप में प्रयोग कर रहा हूं:

 function updateItem() { $this = $(this); $this.hasClass("IsChecked") ? removeItem($this) : addItem($this); } 

वेब के समाधान से एकत्रित समाधान "फ़ंक्शन के साथ जावास्क्रिप्ट टर्नरी ऑपरेटर का उदाहरण"

हे, आपके सवाल में टर्नर सिंटैक्स का कुछ बहुत ही रोमांचक उपयोग हैं; मुझे सबसे अच्छा पिछले एक पसंद है …

 x = (1 < 2) ? true : false; 

टर्नरी का उपयोग पूरी तरह से अनावश्यक है – आप बस लिख सकते हैं

 x = (1 < 2); 

इसी तरह, टर्नरी स्टेटमेंट की स्थिति तत्व हमेशा बूलियन मान के रूप में मूल्यांकन किया जाता है, इसलिए आप यह व्यक्त कर सकते हैं:

 (IsChecked == true) ? removeItem($this) : addItem($this); 

बस के रूप में:

 (IsChecked) ? removeItem($this) : addItem($this); 

दरअसल, मैं भी IsChecked अस्थायी रूप से निकालता हूं जो आपको छोड़ देता है:

 ($this.hasClass("IsChecked")) ? removeItem($this) : addItem($this); 

मौसम के लिए यह स्वीकार्य वाक्य रचना है, यह निश्चित है! पठनीयता को प्रभावित किए बिना कोड की चार पंक्तियों को कम करने का यह एक शानदार तरीका है। मैं तुम्हें सलाह देने वाला एकमात्र शब्द उसी लाइन पर एक से अधिक त्रिगंधात्मक बयान (इस तरह से पागलपन होता है) से बचने के लिए टालना है!

टर्नरी शैली आम तौर पर अंतरिक्ष को बचाने के लिए प्रयोग किया जाता है। शब्दार्थ, वे समान हैं मैं पूरी तरह से / या / अन्य सिंटैक्स के साथ जाना पसंद करता हूं क्योंकि मुझे पठनीयता बलिदान नहीं करना है – मैं पुरानी-स्कूल हूं और मैं अपनी ब्रेसिज़ पसंद करता हूं।

पूरी तरह से सब कुछ के लिए अगर / उसके बाद / अन्य प्रारूप का उपयोग किया जाता है यह विशेष रूप से लोकप्रिय है यदि आप प्रत्येक शाखा में कोड के बड़े ब्लॉकों में आते हैं, तो आपके पास एक म्यूटि-ब्रंच होता है यदि / दूसरे पेड़, या एक से अधिक अन्य / ifs एक लंबी स्ट्रिंग में।

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

अच्छे विचार:

 this > that ? alert(this) : alert(that); //nice and short, little loss of meaning if(expression) //longer blocks but organized and can be grasped by humans { //35 lines of code here } else if (something_else) { //40 more lines here } else if (another_one) /etc, etc { ... 

कम अच्छा:

 this > that ? testFucntion() ? thirdFunction() ? imlost() : whathappuh() : lostinsyntax() : thisisprobablybrokennow() ? //I'm lost in my own (awful) example by now. //Not complete... or for average humans to read. if(this != that) //Ternary would be done by now { x = this; } else } x = this + 2; } 

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

आपके द्वारा पोस्ट किए गए उदाहरण के बारे में विशेष रूप से कुछ भी मुश्किल नहीं है

टर्नरी ऑपरेटर में, पहला तर्क (सशर्त) का मूल्यांकन किया जाता है और यदि परिणाम true होता true , तो दूसरी तर्क का मूल्यांकन किया जाता है और वापस आ जाता है, अन्यथा, तीसरा मूल्यांकन और वापस किया जाता है इनमें से प्रत्येक तर्क किसी भी वैध कोड ब्लॉक हो सकते हैं, जिसमें फ़ंक्शन कॉल शामिल हैं।

इस पर इस तरीके से विचार करें:

 var x = (1 < 2) ? true : false; 

इसके रूप में भी लिखा जा सकता है:

 var x = (1 < 2) ? getTrueValue() : getFalseValue(); 

यह पूरी तरह से मान्य है, और उन कार्यों में कोई भी मनमाना कोड शामिल हो सकता है, चाहे वह मूल्य वापस करने से संबंधित हो या नहीं इसके अतिरिक्त, टर्नरी ऑपरेशन के नतीजे को कुछ भी असाइन करने की ज़रूरत नहीं है, जैसे फ़ंक्शन के परिणामों को कुछ भी असाइन नहीं करना पड़ता है:

 (1 < 2) ? getTrueValue() : getFalseValue(); 

अब बस किसी भी मनमाना कार्यों के साथ उन जगह, और आप अपने उदाहरण की तरह कुछ के साथ छोड़ दिया है:

 (1 < 2) ? removeItem($this) : addItem($this); 

अब आपके अंतिम उदाहरण को वास्तव में एक त्रिगुट की आवश्यकता नहीं है, क्योंकि इसे इस तरह लिखा जा सकता है:

 x = (1 < 2); // x will be set to "true" 

यदि आप घूमने वाले टर्नरी ऑपरेटरों के पास जा रहे हैं, तो मेरा मानना ​​है कि आप ऐसा कुछ करना चाहते हैं:

  var audience = (countrycode == 'eu') ? 'audienceEU' : (countrycode == 'jp') ? 'audienceJP' : (countrycode == 'cn') ? 'audienceCN' : 'audienceUS'; 

यह लिखने / पढ़ने की तुलना में बहुत अधिक कुशल है:

 var audience = 'audienceUS'; if countrycode == 'eu' { audience = 'audienceEU'; } else if countrycode == 'jp' { audience = 'audienceJP'; } else if countrycode == 'cn' { audience = 'audienceCN'; } 

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

मैं भी मुझसे कुछ जोड़ना चाहूंगा

टर्नरी ऑपरेटर के साथ कार्यों को कॉल करने के लिए अन्य संभव वाक्यविन्यास होगा:

 (condition ? fn1 : fn2)(); 

यह आसान हो सकता है यदि आपको दोनों फ़ंक्शन के लिए मापदंडों की एक ही सूची देनी है, तो आपको उन्हें केवल एक बार लिखना होगा

 (condition ? fn1 : fn2)(arg1, arg2, arg3, arg4, arg5); 

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

 $('.some-element')[showThisElement ? 'addClass' : 'removeClass']('visible'); 

या

 $('.some-element')[(showThisElement ? 'add' : 'remove') + 'Class']('visible'); 

एक और उदाहरण:

 var addToEnd = true; //or false var list = [1,2,3,4]; list[addToEnd ? 'push' : 'unshift'](5); 

मुझे पता है कि सवाल पहले से ही उत्तर दिया है।

लेकिन मुझे यहां एक बिंदु जोड़ने दें। यह केवल सच्ची या गलत का मामला नहीं है निचे देखो:

 var val="Do"; Var c= (val == "Do" || val == "Done") ? 7 : 0 

अगर वैल है या क्या हो गया है तो सी 7 हो जाएगी और यह शून्य होगा। इस मामले में सी 7 होगी

यह वास्तव में इस ऑपरेटर का एक और परिप्रेक्ष्य है