'+' त्रुटि से पहले जेएसएचआईएनटी की खराब लाइन का स्पष्टीकरण


125

क्या कोई मुझे समझा सकता है कि जेएसहिंट ने निम्नलिखित के बारे में शिकायत क्यों की,

window.location.href = String1
    + '#'
    + Sting2
    + '='
    + String3;

त्रुटि के साथ, Bad line breaking before '+' error

मैं समझता हूं कि इस त्रुटि को laxbreak विकल्प के साथ कॉन्फ़िगर किया जा सकता है , जिसका वर्णन इस प्रकार है

यह विकल्प आपके कोड में संभवतः असुरक्षित लाइन ब्रेकिंग के बारे में अधिकांश चेतावनियों को दबा देता है। यह अल्पविराम-पहली कोडिंग शैली के बारे में चेतावनी को दबाता नहीं है। उन लोगों को दबाने के लिए आपको laxcomma (नीचे देखें) का उपयोग करना होगा।

यह स्पष्टीकरण बहुत ही कठिन है और मुझे इस बात की उत्सुकता है कि इस तरह से लाइनों को तोड़ना पहली जगह में खराब या ढीला क्यों माना जाता है।

ध्यान रखें कि मैं यहां एक पवित्र युद्ध शुरू करने की कोशिश नहीं कर रहा हूं, मैं सिर्फ एक उद्देश्यपूर्ण उत्तर की तलाश कर रहा हूं कि जेएसहिंट के लोग ऐसा क्यों सोचते हैं कि क्या यह बुरा है, क्या यह सिर्फ एक शैली पसंद है जो वे अपने लिंटर में इंजेक्ट कर रहे हैं (मुझे लगा कि जेएसएलआईएनटी था (इस तरह से लाइन तोड़ने पर कुछ व्याख्याताओं पर गलत हो सकता है कि कुछ है), या अगर लाइनर)।


6
मुझे लगता है कि यह JSHint के अनुसार सिर्फ "बुरी शैली" है। यदि आप अग्रणी कॉमा का उपयोग करते हैं तो आपको वही प्रभाव मिलेगा। पठनीयता के लिए, मैं कम से कम इसे पंक्ति के अंत में + के साथ फिर से लिखना चाहूंगा।
इवन

28
ओह। मुझे लगता है कि यह शैली मल्टी-लाइन स्ट्रिंग्स के साथ उपयोग करने के लिए बिल्कुल पठनीय शैली है, खासकर जब एक संकीर्ण विंडो में कोड को देखते हैं।
लैम्बर्ट

12
टोकन के साथ अग्रणी जो कथन को जारी रखता है, चीजों को संरेखित करने में मदद करता है और कोड ब्लॉक के बाएं हिस्से में नेत्रहीन रूप से निरंतरता व्यक्त करता है, जो कि जहां संरचनात्मक तत्वों को खोजने की उम्मीद करेगा, खासकर अगर जल्दी से स्कैनिंग। यह निश्चित रूप से व्यवहार्य और उचित है और वस्तुनिष्ठ रूप से खराब शैली नहीं है। हालाँकि, इस नियम को लागू करने के लिए एक कोड अखंडता मुद्दा है, जो दुर्भाग्यपूर्ण है।
एडम टोली

1
@AdamTolley मैं पूरी तरह से सहमत हूं, और जब मैंने इस बारे में पूछा , तो यह पुष्टि हुई कि यह FUD था। इसे "मेटा प्रभाव" के बाद जांच के तहत लाया गया था; और यह छानबीन करने से ऐसा लगता है कि यह व्यवहार्य और उचित है।
HostileFork का कहना है कि

2
आजकल ( JSHint 2.9.4 ) त्रुटि संदेश '+' से पहले भ्रामक लाइन ब्रेक है; पाठक इसकी व्याख्या अभिव्यक्ति सीमा के रूप में कर सकते हैं।
राइनोवेवेल

जवाबों:


107

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

विचार यह है कि आप एक पंक्ति के अंत तक यह स्पष्ट कर देते हैं कि क्या अभिव्यक्ति वहाँ समाप्त होती है या अगली पंक्ति पर जारी रखी जा सकती है।


6
उत्तर के लिए धन्यवाद, त्रुटि के पीछे तर्क होने से जेएसहिंट को खुश करने के लिए परिवर्तनों को सही ठहराना मेरे लिए बहुत आसान है।
जेम्स मैकमोहन

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

23
दूसरी @BenHyde, और सामान्य तौर पर यह अधिक मानव-पठनीय है जब कोड के माध्यम से स्किमिंग के साथ लाइन का नेतृत्व करने के लिए +। यह आंखों पर आसान है (और त्रुटि के लिए कम प्रवण) प्रत्येक पंक्ति के दूर अंत तक कूदने की तुलना में बाईं ओर एक एकल स्तंभ का पालन करें यह देखने के लिए कि क्या यह अगली पंक्ति द्वारा जोड़ा जा रहा है। यहां तक ​​कि व्याकरण भी कम क्लिंकी है: "लाइन 118 एपेंडेस 117" बनाम "लाइन 117 को 118 द्वारा जोड़ा जा रहा है।"
वर्स

9
व्यक्तिगत रूप से, मैं परिचालकों (और अल्पविराम) से लाइनों के अंत तक घृणा करता हूं क्योंकि मैं इसे पूर्व में स्किम करता हूं। मेरे लिए बहु-पंक्ति बूलियन कथनों (और अंत में बजाय एक पंक्ति की शुरुआत में) को पढ़ना आसान है), और मैं जल्दी से अल्पविराम वाली सूची को अन्य बहु पंक्ति कथनों से अलग बता सकता हूं, जिनकी शुरुआत उनके साथ हुई थी अल्पविराम। के लिए laxbreak भगवान का शुक्र है
aaaaaa

2
@ बार्नी आप मेरे इसी तरह के सवाल के जवाब के साथ स्वचालित अर्धविराम सम्मिलन के बारे में चिंता को कैसे समझ सकते हैं ? इस प्रारूप का औचित्यपूर्ण जोखिम क्या है? मेरे लिए यह स्कैनेबिलिटी में बढ़त है।
HostileFork का कहना है कि

8

यदि आप नई लाइन में विरोध के रूप में लाइन ब्रेक से पहले + का उपयोग करते हैं, तो इसे खराब लाइन ब्रेक के रूप में चिह्नित नहीं करेंगे। इस तरह:

window.location.href = String1 +
'#' +
Sting2 +
'=' +
String3;

10
यह इस सवाल का एक भी जवाब नहीं है। इतने अप-वोट क्यों?
लैम्बर्ट

4
शायद, लेकिन यह इस मुद्दे के आसपास काम करने का एक तरीका है बिना अपनी jshint सेटिंग्स को बदलना।
asulaiman

4
यह एक टिप्पणी होनी चाहिए क्योंकि यह वास्तव में सवाल का जवाब नहीं देता है लेकिन मूल्यवान जानकारी प्रदान करता है।
टॉमटॉसी

3

सवाल का सीधा जवाब नहीं है, लेकिन Googling (जैसा कि मैंने किया) से आने वाले किसी भी व्यक्ति के लिए जो नियम को रखना चाहते हैं लेकिन चेतावनी को ठीक करते हैं, निम्नलिखित उपयोगी हो सकता है ...

नोटपैड ++ (जैसे JSLint प्लगइन के साथ) का उपयोग करते समय, यह निम्नलिखित खोज और प्रतिस्थापित का उपयोग करके तय किया जा सकता है:

  • क्या ढूँडो: (\r\n|\n|\r)( *)\+
  • इसके साथ बदलें: (पहला और अंतिम स्थान सहित) +$1$2 
  • खोज मोड: नियमित अभिव्यक्ति

(केवल विंडोज पर परीक्षण किया गया है, लेकिन रेगेक्स को यूनिक्स या मैक ओएस लाइन एंडिंग के साथ भी काम करना चाहिए।)

इसी तरह की एक बात के लिए ऐसा करने के लिए ||, &&, ==, !=, <=या >=के बजाय +, इस का उपयोग करें:

  • क्या ढूँडो: (\r\n|\n|\r)( *)(\|\||&&|==|!=|<=|>=)
  • इसके साथ बदलें: (पहला और अंतिम स्थान सहित) $3$1 $2 

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

फेयर पॉइंट, ने शीर्ष पर एक नोट जोड़ा है जिसमें बताया गया है कि मैंने यह क्यों पोस्ट किया।
स्टीव चैम्बर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.