2011-01-21 16 views
10

जबकि मुझे एहसास है कि प्रत्येक भाषा में इंडेंटेशन के लिए अपना स्वयं का सम्मेलन है, मैं मदद नहीं कर सकता लेकिन हाल ही में मैंने जो कुछ खोजा है उससे नाराज हो सकता हूं। PHP कोड से इस कोड पर विचार करें:PHP बनाम जावास्क्रिप्ट स्विच इंडेंटेशन

switch ($i) { 
    case "apple": 
     echo "i is apple"; 
     break; 
    case "bar": 
     echo "i is bar"; 
     break; 
    case "cake": 
     echo "i is cake"; 
     break; 
} 

ध्यान दें कि प्रत्येक मामले स्विच स्टेटमेंट से इंडेंट किया गया है। यह समझ में आता है, क्योंकि कोड को पढ़ने में आसान होता है और ब्लॉक के शरीर में इसके अंदर एक स्तर होता है।

हालांकि, जब मैं JSLint में बराबर जावास्क्रिप्ट स्विच बयान का परीक्षण:

switch (i) { 
    case "apple": 
     alert("i is apple"); 
     break; 
    case "bar": 
     alert("i is bar"); 
     break; 
    case "cake": 
     alert("i is cake"); 
     break; 
} 

... यह मुझे बता एक त्रुटि प्रदर्शित करता है कि यह इस के बजाय तरह दिखाई देना चाहिए:

switch (i) { 
case "apple": 
    alert("i is apple"); 
    break; 
case "bar": 
    alert("i is bar"); 
    break; 
case "cake": 
    alert("i is cake"); 
    break; 
} 

ऐसा लगता है counterintuitive, क्योंकि प्रत्येक मामले अब स्विच ब्लॉक के साथ इनलाइन है। मैं किसी भी कारण की कल्पना नहीं कर सकता कि इसे बेहतर क्यों माना जाएगा, बहुत कम त्रुटि उत्पन्न होती है।

क्या JSLint गलती में है, या यह सिर्फ सम्मेलन के बाद है? यदि उत्तरार्द्ध सत्य है, तो सम्मेलन स्पष्टता के लिए क्यों नहीं होगा?

+8

जेएसलिंट वास्तव में इस तरह की चीजों के बारे में शिकायत करता है? * -dies- * – BoltClock

+0

जेएस और पीएचपी पायथन नहीं हैं, जो इंडेंट आपको पसंद है उसका उपयोग करें। – Shikiryu

+8

मैं 'if ([" सेब "," बार "," केक "] का उपयोग करूंगा। IndexOf (i)! = -1) चेतावनी (" मैं एक "+ i);';) – Gumbo

उत्तर

6

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

+2

बिल्कुल। क्रॉकफोर्ड कुछ जेएस ईश्वर नहीं हैं जिनके नियमों का पालन करना है, हालांकि मुझे पूरा यकीन है कि कुछ चेकबॉक्स हैं जिन्हें आप सख्त व्हाइटस्पेस चेतावनियों/त्रुटियों के लिए जांच/अनचेक कर सकते हैं। –

+2

मैं इसके साथ भी सहमत हूं, लेकिन इस मामले में मेरी भावनाएं इतनी दुखी नहीं हैं क्योंकि वे नाराज हैं। मैं किसी भी तरह से यह "त्रुटि" पर विचार नहीं करता। इसके अलावा, विकल्पों में से कोई भी इसे दबाने लगते हैं। कारण यह एक मुद्दा है क्योंकि उपकरण कई संभावित मुद्दों को खोजता है (यह उनमें से एक नहीं है), और गैर-गलती "त्रुटियों" का समूह होने से वैध लोगों को देखना मुश्किल हो जाता है। – claviska

2

जब तक आपके इंडेंटिंग को तर्कसंगत रूप से उचित ठहराया जा सके, आपको अपनी पसंदीदा शैली में इंडेंट करना चाहिए। यदि JSLint वास्तव में इसके बारे में शिकायत करता है तो यह अत्यधिक pedantic होने जा रहा है।

+0

मैं सहमत हूं। जेएसलिंट एक महान उपकरण है, लेकिन इंडेंटेशन वरीयता पर विचार करते हुए एक "त्रुटि" थोड़ा चुनिंदा लगता है, खासकर जब परिणामी कोड कम स्पष्ट होता है। – claviska

+0

यह वास्तव में एक महान उपकरण _not_ है। यह उन चीजों के बारे में अत्यधिक pedantic है जो एक अलग नहीं बनाते हैं (शैली केवल, त्रुटियों में नहीं); फिर भी, चीजें जो _will_ त्रुटियों का कारण बनती हैं (यानी कुछ प्रकार के वैश्विक रिसाव), यह केवल अनदेखा करता है। जेएसलिंट सांप का तेल है। –

0

यह जेएस के लिए सिर्फ सम्मेलन है (जेएसलिंट सम्मेलन को परिभाषित करता है)। व्यक्तिगत रूप से, मुझे लगता है कि PHP यहां गलत होगा (अगर मैनुअल किसी भी प्रकार के सम्मेलन का पालन करता है, तो मुझे पता है कि मानक लाइब्रेरी नहीं है)। मैं जेएस शैली पसंद करता हूं क्योंकि अगर आप कुछ घोंसले वाले ब्लॉक में हैं तो यह वास्तव में बुरा हो सकता है। उदाहरण के लिए (PHP कोड):

class Foo{ 
     function Bar($arr) { 
      foreach($arr as $item) { 
       switch ($item) { 
        case "foo": 
         // Do something 
         break; 
         // You get the idea 

आखिरकार, आपकी पसंद। मैं PHP मैनुअल का उपयोग स्टाइल गाइड के रूप में नहीं करता; यदि आप विभिन्न भाषाओं के लिए विभिन्न शैलियों का उपयोग नहीं कर सकते हैं, तो अच्छी तरह से परिभाषित जेएस शैली का उपयोग करें।

+0

यदि आप क्षैतिज स्थान पर सीमित हैं तो बस अपने टैब को 2 रिक्त स्थान पर सेट करें। – erjiang

+0

यदि आप इंडेंटेशन के मूर्ख स्तर प्राप्त करने की कोशिश कर रहे हैं तो आप if (is_array ($ arr)) भूल गए हैं :) – GordonM

+0

@ गॉर्डन अब मुझे शूट करें –

1

स्वरूपण महत्वपूर्ण है, अंत में यह आपकी स्वरूपण है। ऐसा करें कि आप कैसा पसंद करते हैं। आपके द्वारा चुनी गई विशिष्ट शैली एक व्यक्तिगत पसंद है और कई शैलियों "अच्छा" हो सकती हैं। हालांकि, किसी भी "अच्छी" स्वरूपण शैली को सुसंगत होना चाहिए - अपने पसंदीदा नियमों को चुनें और उनके साथ चिपके रहें

यह मेरे लिए बहुत ही मजाकिया है कि else के आस-पास {पूर्ववर्ती कोड या नहीं, या "cuddling घुंघराले ब्रेसिज़" जैसी चीजों पर जैसे क्रोध पर बहस कैसे होती है। मुझे लगता है कि केवल कम्युनिस्ट एक ही लाइन पर अपने if कथन के रूप में एक ही स्थान पर हैं। :)

+0

मान लीजिए कि मैं एक कम्युनिस्ट हूं: पी फिर, मुद्दा यह है कि झूठी त्रुटियों को ट्रिगर करना संभावित रूप से मान्य लोगों को देखना मुश्किल है। – claviska

+0

जब तक आप एक सतत कॉमी हैं, तो आप मेरे द्वारा ठीक हैं। किसी भी प्रेरणा के एक असंगत स्वरूपक, यह बस अच्छा नहीं है। –

+0

मेरे लिए पर्याप्त मेला :) – claviska

0

अतिरिक्त व्हाइटस्पेस जावास्क्रिप्ट और PHP से बाहर निकला है जब उनका अर्थ है, तो आप अपना कोड बदसूरत बना सकते हैं जैसा आप चाहें। व्यक्तिगत तौर पर मैं इतना है कि मैं गिरावट के माध्यम से त्रुटियों छूट न मेरी स्विच बयान करने के लिए अतिरिक्त घुंघराले कोष्ठक में रखना पसंद करते हैं:

switch ($someVar) 
{ 
    case 'value': 
    { 
    //your code here 
    } break; 
    case 'something': 
    { 
    //more code here 
    } 
    case 'something else': 
    { 
    //some more code here 
    } break; 
    default: 
    { 
    //default code here 
    } break; 
} 

अंत ब्रेसिज़ में कोड नीचे स्कैन कर रहा है मुझे जांच करने के लिए अगर मैं सही तोड़ बयान जोड़ा अनुमति देता है । आप देख सकते हैं कि 'something' मामले में एक ब्रेक स्टेटमेंट (शायद उद्देश्य पर, शायद एक गलती) गुम है।

कुछ इस प्रारूप से असहमत होंगे, लेकिन यह वास्तव में मुझे मिल रहा है। प्रारूप इससे कोई फर्क नहीं पड़ता। पार्सर्स बहुत क्षमा कर रहे हैं। कुछ ऐसा ढूंढें जो आपके लिए काम करता है और इसके साथ चिपके रहें।

4

क्रॉकफोर्ड की पुस्तक में, उन्होंने कहा कि ब्लॉक एक नया दायरा पेश नहीं करते हैं। "जेएसलिंट फ़ंक्शन के साथ ब्लॉक की अपेक्षा करता है, अगर, स्विच करता है, करता है, करता है, करता है और कथन का प्रयास करता है और कहीं और नहीं।"

इसके अलावा कि

if (condition){ 
    statements; 
} 

ब्लॉक करने की विधि सिफारिश की है, क्योंकि यह "अधिक लचीला" है। मुझे बहुत संदेह है कि यह त्रुटि में इस तरह से संरचित किया गया था।

0

यह उसकी जावा पृष्ठभूमि के माध्यम से लीक है। जेएसलिंट तरीका official Java conventions for switch case की नकल करता है। मैं आपका पहला उदाहरण पसंद करता हूं, लेकिन मैं जेएसलिंट तरीके को सहन करना सीख रहा हूं।

0

मैं भी इस बहुत भ्रामक पाया, और http://javascript.crockford.com/code.html में जावास्क्रिप्ट प्रोग्रामिंग भाषा के लिए डगलस Crockford के कोड कन्वेंशनों में इस कारण से पाया

क्लाज (मामले, पकड़, डिफ़ॉल्ट, और, अंत में) नहीं बयान कर रहे हैं और इसलिए बयान की तरह इंडेंट नहीं किया जाना चाहिए।

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