questions - javascript programs




जावास्क्रिप्ट में एक पंक्ति कथन में घुंघराले ब्रेसिज़ आवश्यक हैं? (12)

नहीं

लेकिन उनकी सिफारिश की जाती है। यदि आपने कभी कथन का विस्तार किया है तो आपको उनकी आवश्यकता होगी।

यह पूरी तरह से मान्य है

if (cond) 
    alert("Condition met!")
else
    alert("Condition not met!")

हालांकि यह अत्यधिक अनुशंसा की जाती है कि आप हमेशा ब्रेसिज़ का उपयोग करें क्योंकि यदि आप (या कोई और) कभी भी कथन का विस्तार करता है तो इसकी आवश्यकता होगी।

यह वही अभ्यास सभी सी सिंटैक्स शैली भाषाओं में ब्रासिंग के साथ आता है। सी, सी ++, जावा, यहां तक ​​कि PHP सभी ब्रेसिज़ के बिना एक लाइन स्टेटमेंट का समर्थन करते हैं। आपको यह महसूस करना होगा कि आप केवल दो पात्रों को बचा रहे हैं और कुछ लोगों की ब्रासिंग शैलियों के साथ आप एक लाइन भी सहेज नहीं रहे हैं। मैं एक पूर्ण ब्रेस शैली (जैसे निम्नानुसार) पसंद करता हूं, इसलिए यह थोड़ी देर तक रहता है। इस तथ्य के साथ ट्रेडऑफ बहुत अच्छी तरह से मुलाकात की है कि आपके पास बेहद स्पष्ट कोड पठनीयता है।

if (cond) 
{
    alert("Condition met!")
}
else
{
    alert("Condition not met!")
}

मैंने एक बार सुना है कि एक पंक्ति के विवरण में घुंघराले ब्रेसिज़ को छोड़कर जावास्क्रिप्ट में हानिकारक हो सकता है। मुझे अब तर्क याद नहीं है और Google खोज ने बहुत मदद नहीं की है। क्या ऐसी कोई चीज है जो जावास्क्रिप्ट में घुंघराले ब्रेसिज़ के भीतर सभी बयानों को घेरने का अच्छा विचार बनाती है?

मैं पूछ रहा हूं, क्योंकि हर कोई ऐसा करने लगता है।


@ जोश के द्वारा उल्लिखित कारण के अतिरिक्त (जो जावा, सी आदि पर भी लागू होता है), जावास्क्रिप्ट में एक विशेष समस्या स्वचालित अर्धविराम सम्मिलन है । विकिपीडिया उदाहरण से:

return
a + b;

// Returns undefined. Treated as:
//   return;
//   a + b;

इसलिए, यदि यह इस तरह उपयोग किया जाता है, तो यह अप्रत्याशित परिणाम भी प्राप्त कर सकता है:

if (x)
   return
   a + b;

यह लिखना वास्तव में बेहतर नहीं है

if (x) {
   return
   a + b;
}

लेकिन शायद यहां त्रुटि का पता लगाने में थोड़ा आसान है (?)


एक पठनीयता पहलू है - उसमें जब आपके पास यौगिक बयान होते हैं तो यह बहुत भ्रमित हो सकता है। (इंडेंटिंग मदद करता है, लेकिन कंपाइलर / दुभाषिया के लिए कुछ भी मतलब नहीं है)

var a;
var b;
var c;

//Indenting is clear
if (a===true)
  alert(a); //On on IF
alert(b); //Always

//Indenting is bad
if (a===true)
  alert(a); //On on IF
  alert(b); //Always but expected?

//Nested indenting is clear
if (a===true)
  if (b===true)
    alert(a); //Only on if-if
alert (b); //Always

//Nested indenting is misleading
if (a===true)
  if (b===true)
    alert(a); //Only on if-if
  alert (b); //Always but expected as part of first if?

//Compound line is misleading
//b will always alert, but suggests it's part of if
if (a===true) alert(a);alert(b); 
else alert(c); //Error, else isn't attached

और फिर एक विस्तारशील पहलू है:

//Problematic
if (a===true)
  alert(a);
  alert(b); //We're assuming this will happen with the if but it'll happen always
else       //This else is not connected to an if anymore - error
  alert(c);

//Obvious
if (a===true) {
  alert(a); //on if
  alert(b); //on if
} else {
  alert(c); //on !if
} 

(सोच यह है कि यदि आपके पास हमेशा ब्रैकेट होते हैं तो आप उस ब्लॉक के अंदर अन्य कथन डालने के बारे में जानते हैं)।


एक लाइन स्टेटमेंट पर घुंघराले ब्रेसिज़ का उपयोग करने के लिए कोई प्रोग्रामिंग कारण नहीं है।

यह केवल कोडर वरीयताओं और पठनीयता के लिए आता है।

आपका कोड इसके कारण टूट नहीं जाएगा।


कोई रखरखाव समस्या नहीं है!

आप सभी के साथ समस्या यह है कि आप हर जगह अर्धविराम डालते हैं। आपको कई कथनों के लिए घुंघराले ब्रेसिज़ की आवश्यकता नहीं है। यदि आप एक कथन जोड़ना चाहते हैं, तो बस अल्पविराम का उपयोग करें।

if (a > 1)
 alert("foo"),
 alert("bar"),
 alert("lorem"),
 alert("ipsum");
else
 alert("blah");

यह वैध कोड है जो आपके जैसा अपेक्षा करेगा!


जावास्क्रिप्ट में कई समस्याएं हैं। जावास्क्रिप्ट आर्किटेक्ट डगलस क्रॉकफोर्ड के बारे में बात करते हुए देखें कि अगर कथन ठीक लगता है लेकिन वापसी का विवरण एक समस्या पेश कर सकता है।

return
{
    ok:false;
}
//silent error (return undefined)

return{
    ok:true;
}
//works well in javascript

बयान अगर एकाधिक लाइन गैर घुंघराले ब्रेसिज़ प्राप्त करने का एक तरीका है .. (वाह क्या अंग्रेजी ..) लेकिन यह थोड़े tedius है:

if(true)
   funcName();
else
   return null;


function funcName(){
  //Do Stuff Here...
}

मैं बस यह ध्यान रखना चाहूंगा कि आप घुंघराले ब्रेसिज़ को और भी छोड़ सकते हैं। जॉन रेजिग के इस आलेख में जैसा देखा गया है।

if(2 == 1){
    if(1 == 2){
        console.log("We will never get here")
    }
} else 
    console.log("We will get here")

मैंने यह जवाब एक समान अनुभव के बारे में खोज पाया, इसलिए मैंने अपने अनुभव के साथ इसका उत्तर देने का फैसला किया।

ब्रैकेटलेस स्टेटमेंट अधिकांश ब्राउज़रों में काम करते हैं, हालांकि, मैंने परीक्षण किया है कि वास्तव में कुछ ब्राउज़र में ब्रैकेटलेस विधियां काम नहीं करती हैं।

26 फरवरी 2018 तक, यह कथन पाले चंद्रमा में काम करता है, लेकिन Google क्रोम नहीं।

function foo()
   return bar;

यह शैली का मामला है, लेकिन घुंघराले ब्रेसिज़ संभावित खतरे को रोकने के लिए अच्छे हैं।


हमेशा यह पाया

if(valid) return;

मेरी आंखों की तुलना में आसान है

if(valid) {
  return;
}

जैसे सशर्त भी

(valid) ? ifTrue() : ifFalse();

इसके बजाए पढ़ने के लिए आसान है (मेरी व्यक्तिगत राय)

if(valid) {
  ifTrue();
} else {
  ifFalse();
}

लेकिन मुझे लगता है कि यह कोडिंग शैली के लिए नीचे आता है


बिलकुल हाँ

"यह व्यक्तिगत वरीयता" के बारे में भूल जाओ, "कोड ठीक चल जाएगा", "यह मेरे लिए ठीक काम कर रहा है", "यह और अधिक पठनीय है" यादा यादा बीएस।

तर्क: "यह व्यक्तिगत वरीयता है"

नहीं ऐसा नहीं है। जब तक कि आप एक आदमी टीम नहीं हैं, मंगल ग्रह पर छोड़कर, नहीं। अधिकांश समय आपके कोड पढ़ने / संशोधित करने वाले अन्य लोग होंगे। किसी भी गंभीर कोडिंग टीम में यह अनुशंसित तरीका होगा, इसलिए यह 'व्यक्तिगत वरीयता' नहीं है।

तर्क: "कोड ठीक चल जाएगा"

तो स्पेगेटी कोड करता है! क्या इसका मतलब यह है कि इसे बनाना ठीक है?

तर्क: "यह मेरे लिए ठीक काम कर रहा है"

मेरे करियर में मैंने इस समस्या के कारण इतनी सारी बग बनाई है। आपको शायद याद नहीं है कि आपने 'DoSomething()' कितनी बार टिप्पणी 'DoSomething()' और 'SomethingElse()' क्यों कहा जाता है:

if (condition) 
    DoSomething();
SomethingElse();

या 'SomethingMore' जोड़ा और ध्यान नहीं दिया कि इसे नहीं कहा जाएगा (भले ही इंडेंटेशन अन्यथा इंगित करता है):

if (condition)
  DoSomething();
  SomethingMore();

मेरे पास एक वास्तविक जीवन उदाहरण है। कोई भी सभी लॉगिंग को चालू करना चाहता था ताकि वे "Console.println" => //"Console.println" ढूंढें और प्रतिस्थापित करें:

if (condition) 
   Console.println("something");
SomethingElse();

समस्या देखें?

यहां तक ​​कि यदि आप सोचते हैं, "ये बहुत तुच्छ हैं, मैं कभी ऐसा नहीं करूंगा"; याद रखें कि हमेशा आपके से कम प्रोग्रामिंग कौशल वाले टीम सदस्य होंगे (उम्मीद है कि आप टीम में सबसे खराब नहीं हैं!)

तर्क: "यह अधिक पठनीय है"

अगर मैंने प्रोग्रामिंग के बारे में कुछ सीखा है, तो यह है कि साधारण चीजें बहुत जटिल हो जाती हैं। यह बहुत आम है कि यह:

if (condition) 
    DoSomething();

विभिन्न ब्राउज़रों / वातावरण / उपयोग मामलों या नई सुविधाओं के साथ परीक्षण किए जाने के बाद निम्नलिखित में बदल जाता है:

if (a != null)
   if (condition) 
      DoSomething();
   else
      DoSomethingElse(); 
      DoSomethingMore();
else 
    if (b == null)
         alert("error b");
    else 
         alert("error a");

और इसके साथ इसकी तुलना करें:

 if (a != null) {
    if (condition) { 
       DoSomething();
    }
    else {
       DoSomethingElse();
       DoSomethingMore();
    }
 } else if (b == null) {
    alert("error b");
 } else {
    alert("error a");
 }

पीएस: बोनस अंक ऊपर दिए गए उदाहरण में बग को किसने देखा






javascript