कुछ भाषाएं टैब के बजाय रिक्त स्थान का उपयोग करने की सलाह क्यों देती हैं? [बन्द है]


10

हो सकता है कि मैं इसमें अकेला हूं, लेकिन कुछ चीजें मुझे परेशान करती हैं जैसे लोग टैब के बजाय रिक्त स्थान का उपयोग करने के लिए प्रेरित करते हैं। टाइपिंग की SpaceSpaceSpaceSpaceतुलना में टाइपिंग आसान और अधिक सहज कैसे है Tab? निश्चित रूप से, टैब की चौड़ाई परिवर्तनशील है, लेकिन यह रिक्त स्थानों की तुलना में इंडेंटेशन स्पेस का अधिक संकेत है। वही चीज बैकस्पेसिंग के लिए जाती है; एक बार या चार बार बैकस्पेस?

पायथन जैसी भाषाएं टैब पर रिक्त स्थान का उपयोग करने की सलाह क्यों देती हैं?


24
जब आप हिट करते हैं तो आप टैब के बजाय रिक्त स्थान सम्मिलित करने के लिए अधिकांश संपादकों को कॉन्फ़िगर कर सकते हैं tab। यदि आप अपने पसंदीदा संपादक में इसे कॉन्फ़िगर नहीं कर सकते हैं, तो आपको एक बेहतर संपादक की आवश्यकता है।
एडम लेअर

एक बात, 'टैब' दबाए जाने पर कई संपादक 4-8 स्पेस डालने के लिए सेटअप हो सकते हैं, इसलिए यह टैब की तरह ही एक प्रमुख प्रेस है।
इको का कहना है कि मोनिका

2
यह अभी भी मेरे सवाल का जवाब नहीं देता है। टैब के बजाय स्पेस क्यों? ज़रूर, आप टैब के बजाय रिक्त स्थान सम्मिलित करने के लिए अपने संपादक को कॉन्फ़िगर कर सकते हैं, लेकिन आप संभवतः रिक्त स्थान के साथ टैब सम्मिलित भी कर सकते हैं। सवाल यह है कि आप ऐसा क्यों करना चाहेंगे? क्या संभावित लाभ प्राप्त होता है?
नातुल्ली काए

4
@ Tk Spaces अस्पष्ट टैब हैं जिन्हें बदला जा सकता है
मार्टिन बेकेट

3
@TKKocheran, क्योंकि टैब आपके आउटपुट में फंकी चीजें करते हैं जब आप गलती से उन्हें एक स्ट्रिंग में सम्मिलित करते हैं।
zzzzBov

जवाबों:


15

संगति, मुख्य रूप से।

इसके अलावा, कभी-कभार कुछ ऐसा होता है जो वास्तव में व्हाट्सएप का उपयोग करता है - जैसे पायथन: मुझे बताएं, अगर मैं निम्नलिखित कोड स्निपेट चलाऊं तो क्या होगा?

def foo():
    print "a"
    print "b"

उत्तर: आपको एक इंडेंटेशन मिलेगा, क्योंकि वे दो प्रिंट स्टेटमेंट एक ही स्तर पर इंडेंट नहीं हैं - और इसलिए समान कोड ब्लॉक का हिस्सा नहीं है। (पहले वाला एक टैब, दूसरा सभी स्पेस का उपयोग करता है)

तब निराशा होती है जब एक डेवलपर के संपादक के पास 8 स्थानों पर सेट टैब होता है, और दूसरे ने उन्हें 4 पर सेट किया है और किसी ने 5 का उपयोग किसी विषम कारण के लिए किया है ... यह एक वर्कस्टेशन पर पूरी तरह से सामान्य लग सकता है, लेकिन तब जब इसमें जांच की जाती है एसवीएन और कोई और अपडेट करता है, वे एक भयानक, भयानक गड़बड़ देखेंगे।

इसलिए वे दो हमेशा अच्छे कारण हैं जो हमेशा सुसंगत रहें, चाहे वह स्थान हो या टैब।

लेकिन, स्थान टैब की तुलना में इंडेंटेशन पर अधिक नियंत्रण की अनुमति देते हैं, और इसके लिए संपादकों में किसी विशेष कॉन्फ़िगरेशन की आवश्यकता नहीं होती है। (हालांकि यह आसान बनाया जा सकता है - उदाहरण के लिए, विम में, set expandtabजब भी आप टैब को हिट करते हैं तो रिक्त स्थान डालने के लिए उपयोग करें)

संपादित करें: और पर्याप्त रूप से पर्याप्त, साइट को लगता है कि मेरा टैब रिक्त स्थान में सामान्य हो गया है ताकि ब्राउज़र इसे सही ढंग से प्रदर्शित कर सके। मूल, टैब शामिल देखने के लिए "संपादित करें" पर क्लिक करें;)


5
टैब के साथ आपकी समस्याएं (विशेष रूप से, भयानक एसवीएन गड़बड़) केवल तभी आती हैं जब आप अपने संपादक में टैब-टू-स्पेस विकल्प का उपयोग करते हैं। यदि आप और आपकी टीम टैब-टू-स्पेस विकल्प को अक्षम करने के लिए सहमत हैं, तो एक टैब हमेशा किसी भी दृश्य में एक टैब होगा: तो यह सिर्फ एक विकल्प है कि आप इसे अपने संपादक में कितना चौड़ा दिखाना चाहते हैं।
२०:४० पर होरसकॉल

@ हॉर्सकोल नोप, भयानक गंदगी है क्योंकि रिक्त स्थान और टैब मिश्रित हो गए हैं। मुझे लगता है कि मैंने इतना स्पष्ट नहीं किया है ("डरावनी, भयानक गड़बड़" रेखा के बाद अकेला वाक्य देखें)। इसलिए रिक्त स्थान को टैब के साथ अच्छी तरह से संरेखित करने के लिए बनाया गया था, जब वे 4-स्थान के बराबर सेट होते हैं, लेकिन तब जब कोई अन्य व्यक्ति इसे देखता है (चाहे टैब-टू-स्पेस सेट किया गया हो), उन्हें एक गड़बड़ मिलती है।
इज़काता

4
मैं देखता हूं - ठीक है, आपको अपनी टीम के लिए एक दिशानिर्देश निर्धारित करने की आवश्यकता है - या तो लगातार रिक्त स्थान या टैब का उपयोग करें ... किसी भी तरह, टैब-टू-स्पेस हर समय एक बुरा विचार है;)
HorusKol

21
यही कारण है कि मैं व्हॉट्सएप-सार्थक भाषाओं के विचार को एक डिजाइन दोष मानता हूं। जिन चीजों को आप नहीं देख सकते, उन्हें कभी भी आपका कोड नहीं तोड़ना चाहिए।
पॉल नाथन

सिर्फ रिकॉर्ड के लिए, मैं @PaNNathan से सहमत हूँ
इज़काता

11

यह पायथन में इंडेंटेशन और व्हाट्सएप के बारे में एक अच्छी चर्चा है; लेख से:

[I] t पूरी तरह से टैब से बचने के लिए एक अच्छा विचार हो सकता है, क्योंकि कंप्यूटर की दुनिया में टैब के शब्दार्थ बहुत अच्छी तरह से परिभाषित नहीं होते हैं, और उन्हें विभिन्न प्रकार के सिस्टम और संपादकों पर पूरी तरह से अलग तरीके से प्रदर्शित किया जा सकता है। इसके अलावा, कॉपी और पेस्ट ऑपरेशन के दौरान, टैब अक्सर नष्ट हो जाते हैं या गलत तरीके से परिवर्तित हो जाते हैं, या जब स्रोत कोड का एक टुकड़ा वेब पेज या अन्य प्रकार के मार्कअप कोड में डाला जाता है।

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

खुद के लिए, मैं रिक्त स्थान पसंद करता हूं क्योंकि कोड हमेशा समान मात्रा में इंडेंटेशन के साथ प्रदर्शित होता है, चाहे मैं इसे आईडीई में देख रहा हूं less, या नोटपैड; यानी रिक्त स्थान अधिक पोर्टेबल हैं।


3
पुन: "क्या मैं इसे एक आईडीई में देख रहा हूं, या कम या नोटपैड; यानी रिक्त स्थान अधिक पोर्टेबल हैं" - यह उन रिक्त स्थानों के लिए सबसे अच्छा तर्क है जो मैंने कभी सुना है। मैं खुद एक "टैब्स" आदमी हूं, लेकिन कभी-कभी अप्रत्याशित तरीकों से प्रदान किए गए टैब-स्पेंडेड कोड को देखकर नापसंद किया जाता है।
एरिक

2

पायथन इंडेंटेशन में कार्यक्रम के प्रवाह को नियंत्रित करता है और इसलिए यह महत्वपूर्ण है।
यदि आप टैब के साथ स्वरूपित कोड लेते हैं और इसे कॉपी करते हैं ताकि टैब बदल जाए या कोड की संरचना नष्ट हो जाए। रिक्त स्थान हमेशा रिक्त स्थान = बहुत सुरक्षित होते हैं।

यदि आपके स्पेस बार पर पहनने और आंसू आपको चिंतित करते हैं, तो संभवतः आपके संपादक को टैब को स्वचालित रूप से रिक्त स्थान में बदलने के लिए सेट किया जा सकता है।


मैं अधिक समय बर्बाद करने के साथ संबंधित हूं टाइपिंग स्पेस या बैकस्पेस चार बार बनाम एक कीस्ट्रोक दोनों को करने के लिए।
नफ़तुली काय

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

@TKKocheran ओह, यह आपकी वास्तविक चिंता है? मुझे नहीं पता कि उन्होंने यह कैसे किया, लेकिन मेरे काम पर विम सेट किया गया है ताकि बैकस्पेस पिछले टैब में वापस चला जाए, कई स्थानों पर, पूरी तरह से पारदर्शी रूप से
इज़काता

क्या आप .vimrcमेरे लिए डंप कर सकते हैं :)
Naftuli Kay

1
@TKKocheran ने पाया - यह सिर्फ है set softtabstop=4, और TAB और BACKSPACE दोनों एक टैब के रूप में 4 रिक्त स्थान का उपयोग करेंगे। (खैर, प्रत्येक
टैबस्टॉप

2

रिक्त स्थान हमेशा उपयोग किया जाना चाहिए, क्योंकि अकेले टैब कई शैलियों के लिए पर्याप्त रूप से लचीला नहीं होते हैं, और टैब और रिक्त स्थान (लगभग) को इंटरमिक्स करने से हमेशा एक पूर्ण गड़बड़ पैदा होती है।

एक शैली के उदाहरण के लिए जिसे आमतौर पर रिक्त स्थान की आवश्यकता होती है, कुछ इस तरह से विचार करें:

call_some_function(parameter1,
                   parameter2,
                   parameter3,
                   parameter4,
                   parameter5,
                   parameter6,
                   parameter7);

जब तक आप टैब आकार (कोष्ठक के लिए एक शून्य) टैब के एक से अधिक होने के लिए अपने सभी कार्यों को फिर से नाम देने के लिए तैयार नहीं होते हैं, तब तक यह केवल ऐसा नहीं करेगा।

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

यहां तक ​​कि अगर आप अपने टैब के साथ मिल रहे रिक्त स्थान के खिलाफ सुनिश्चित कर सकते हैं, तब भी आपको एक समस्या है: टैब भी चर-चौड़ाई के फोंट के साथ खराब खेलते हैं। यह समस्या तब उत्पन्न होती है जब (उदाहरण के लिए) आप संरेखित अनुरेखण टिप्पणी चाहते हैं:

a.m = 9;   // this is the slope
a.i = 4;   // this is the intensity
a.x = 1;   // this is the x-intercept

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

a.m = 9;          // this is the slope
a.i = 4;  // this is the intensity
a.x = 1;          // this is the x-intercept

हमारे चर-चौड़ाई फ़ॉन्ट में 'i' और 'm' या 'x' के बीच की चौड़ाई में अचानक छोटे अंतर को पूरे टैब स्टॉप तक बढ़ा दिया गया है।

लब्बोलुआब यह है कि आप टैब के साथ कोड को देखने के तरीके में लगभग कोई भी बदलाव, कोई फर्क नहीं पड़ता कि कैसे तुच्छ प्रतीत होता है, आमतौर पर एक अपठनीय गड़बड़ पैदा करेगा।

आपके अन्य सवालों के जवाब देने के लिए: अन्य ने पहले ही इसे इंगित कर दिया है, लेकिन मैं किसी प्रोग्रामिंग एडिटर (या किसी और चीज़ में) की कल्पना नहीं कर सकता, वास्तव में स्पेस बार डालने के लिए स्पेस बार का उपयोग कर रहा हूं, इसलिए आपके प्रश्न के बारे में: "टाइपिंग spacespacespacespace" है अप्रासंगिक क्योंकि कोई भी ऐसा नहीं करता है। इसी तरह बैक-स्पेसिंग के साथ: एक संपादक की कल्पना करना कठिन है BkSpc, जिसे पिछले टैब स्टॉप पर जाने के लिए चार बार दबाने की आवश्यकता होती है , इसलिए (फिर से) सवाल अप्रासंगिक है।

नीचे पंक्ति: टैब ठीक हैं यदि आप (और केवल आप) कभी आपके कोड को देखेंगे, और आप कभी भी एक एकल संपादक के साथ ऐसा करते हैं कि आप कभी भी पुन: कॉन्फ़िगर नहीं करते हैं (बिल्कुल भी!), हालांकि, ऐसी स्थितियां असंभव के करीब हैं। लागू करें कि केवल एक ही उचित उत्तर है: कभी भी टैब का उपयोग न करें।


1
मैं आपको कहता हूं कि "आनुपातिक फोंट रिक्त स्थान और टैब दोनों को तोड़ते हैं लेकिन वे टैब को खराब करते हैं, इसलिए रिक्त स्थान का उपयोग करें"। लोचदार टैबस्टॉप का उपयोग क्यों नहीं किया जाता है? nickgravgaard.com/elastictabstops
Amara

@sparkleshy: यह एक अच्छा विचार है, लेकिन इससे वास्तविक कोड पर कोई फर्क नहीं पड़ता है, और तब तक नहीं होगा जब तक कि वास्तविक संपादकों में सभी (या कम से कम विशाल बहुमत) पहले से ही शामिल न हों।
जेरी कॉफिन

... मुझे पता है: '(- ठीक है, थोड़े। आप अभी भी एक संपादक का उपयोग कर सकते हैं जो रिक्त स्थान द्वारा समर्थित है (जैसे टैब कुंजी होना चाहिए यदि आप रिक्त स्थान का उपयोग कर रहे हैं), लेकिन दिखाते हैं कि वे लोचदार टैबस्टॉप हैं; यह रिक्त स्थान का प्रबंधन करता है। आसान।
अमारा

2
यदि आप आनुपातिक चौड़ाई के फोंट में प्रोग्रामिंग कर रहे हैं, तो ठीक है, आपको चिंता करने के लिए सिर्फ टैब की तुलना में बहुत अधिक समस्याएं मिली हैं ...
ब्रायन नोब्लुक

1
@BrianKnoblauch: फॉन्ट यूरोफ्यूरेंस का उपयोग करने वाले के रूप में, मुझे असहमत होना चाहिए। केवल एक चीज जो कभी मुझे परेशान करती है वह है रिक्त स्थान। यह भी मेरे इंडेंटेशन शैली के साथ करना है, जो कि लाइनों के बीच एक से अधिक टैब से कभी अलग नहीं होना है। यह मानकर कि मुझे कभी भी लोचदार टैबस्टॉप मिलते हैं, मेरा कोड और भी बेहतर दिखेगा।
मगस

2

बड़ी समस्या "टैब" चौड़ाई की असंगति है कभी-कभी उन्हें चार रिक्त स्थान के रूप में कभी-कभी आठ में गाया जाता है। कई संपादकों में आप उन्हें 1 से 9 स्थानों तक कुछ भी सेट कर सकते हैं।

तो यह एक साधारण WYSWYG संपादक को एक व्हाट यू सीड में बदल देता है जो कि कोई और है।

पाइथन के लिए इसकी एक विशेष समस्या है, लेकिन इसके किसी भी "घुंघराले कोष्ठक" भाषाओं में एक समस्या के रूप में इंडेंटेशन का उपयोग मानव पाठकों को अर्थ देने के लिए किया जाता है और गड़बड़ टैब को पढ़ने के लिए कोड को मुश्किल बनाते हैं।

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