व्हाट्सएप बनाम {} की गुंजाइश का संकेत देने के लिए किसी भाषा के पक्ष और विपक्ष क्या हैं? [बन्द है]


17

ऐसा लगता है कि इसका बेहतर तरीका है कि गुंजाइश को इंगित करने के लिए कोष्ठक या टोकन जैसे कोष्ठक का उपयोग करना बेहतर है। मैंने असंगत इंडेंटेशन समस्या के लिए कई प्रशंसा अजगर के समाधान को देखा है, लेकिन कई असहमत हैं:

जिस भी भाषा में व्हॉट्सएप है, उसे मरने की जरूरत है।

बाद में उसी उत्तर पर पोस्ट किया गया:

जब तक मैंने वास्तव में कोशिश नहीं की, तब तक मैं व्हाट्सएप एंटी-व्हाट्सएप-टोकन था। शायद इसने मेरी व्यक्तिगत सफेद-अंतरिक्ष लेआउट को बहुत मदद की, जो अजगर-भूमि में सभी का उपयोग करता है। शायद यह है कि मैं थोड़ा कम से कम हूं, लेकिन अगर आप वैसे भी इंडेंट करने जा रहे हैं, तो {} s से परेशान क्यों हैं?

मैं प्रत्येक पक्ष के लिए कुछ स्पष्ट तर्क देख सकता हूं:

व्हाट्सएप का उपयोग करना:

  • कोड में असंगत इंडेंटेशन को कम करने में मदद करता है
  • एक ही उद्देश्य की पूर्ति के लिए दृश्यमान टोकन के साथ स्क्रीन को बदलकर स्क्रीन को साफ करता है

टोकन का उपयोग करना:

  • कोड को अलग-अलग स्तरों पर काटना और पेस्ट करना बहुत आसान है (आपको इंडेंटेशन ठीक नहीं करना है)
  • अधिक सुसंगत। कुछ टेक्स्ट एडिटर व्हॉट्सएप को अलग तरह से प्रदर्शित करते हैं।
  • वर्तमान में अधिक लोकप्रिय है।

क्या कोई बिंदु छूट गया है? आप क्या पसंद करेंगे? लंबे समय तक एक या दूसरे के साथ काम करने के बाद ज्ञान का कोई भी शब्द?


पुनश्च। मुझे उससे नफरत है जब भाषाएं प्रत्येक नियंत्रण संरचना के लिए एक ही टोकन का उपयोग नहीं करती हैं। VB वास्तव में अपने बयानों End Ifऔर End Whileबयानों से परेशान है , अधिकांश अन्य भाषाएं हर चीज के लिए {} का उपयोग करती हैं। लेकिन शायद यह एक अलग प्रश्न के लिए एक विषय है ...


2
मैं नहीं कहता कि यह "काटने और चिपकाने के लिए बहुत आसान है"। यह केवल थोड़ा आसान है।
कुगेल

1
जब तक आप कोड के ब्लॉक छोटे और व्यवस्थित रखते हैं, टोकन वास्तव में मायने नहीं रखते ... वैसे, 'पवित्र-युद्ध' टैग, लोल
स्कॉट

"कुछ टेक्स्ट एडिटर व्हॉट्सएप को अलग तरह से प्रदर्शित करते हैं।": ?? "वर्तमान में अधिक लोकप्रिय है।": लोकप्रियता अक्सर एक विचार की गुणवत्ता से संबंधित नहीं होती है।
जियोर्जियो

मुझे व्हॉट्सएप सिंटैक्स पसंद है, और मुझे कॉफीस्क्रिप्ट और हास्केल में कोडिंग पसंद है (हाँ, मुझे इसकी मुश्किल पता है)। मैंने जावास्क्रिप्ट और सी में एक गुच्छा कोडित किया है, और मैं अभी वापस} नहीं जा सकता। हालाँकि, लिस्प एस-एक्सप्रेशन जब उन्हें बॉक्स
डिव से

मुझे लगता है कि अगर आपको अकेले व्हाट्सएप पर निर्भर रहना पड़े तो त्रुटियों को दूर करना कठिन हो जाता है। उदाहरण के लिए: stackoverflow.com/questions/21205836/… ओपी कोड और उत्तर के बीच एकमात्र अंतर अतिरिक्त स्थान है। एक} होने से यह पता चलता है कि कौन सा कोड लूप के अंदर है और जो ज्यादा स्पष्ट नहीं है।
प्राचीन एलेवेटर

जवाबों:


15

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

इसे ध्यान में रखते हुए, मुझे लगता है कि सबसे सरल उत्तर यह है कि "कुछ लोगों को ब्रेसिज़ पसंद है, कुछ लोगों को व्हॉट्सएप पसंद है" और इसे उस पर छोड़ दें।



इसके अलावा, कुछ है कि कुछ के लिए एक समर्थक है दूसरों के लिए एक चोर हो सकता है।
लैरी कोलमैन

उत्कृष्ट बिंदु। व्यक्तिगत रूप से मुझे लगता है कि वे एक साथ काम करते हैं, और जब तक सोप स्पष्ट है, मैं शिकायत नहीं करूंगा (बहुत)।
माइकल के

8
मैं आपकी उपमा से सहमत नहीं हूं। प्रोग्रामर्स जो इसे पसंद करते हैं, यहां तक ​​कि व्हाट्सएप-डिपेंडेंट सिंटैक्स हैम्पर्स उत्पादकता को मानने के लिए बहुत उद्देश्यपूर्ण कारण हैं। यह कहना थोड़ा सा है कि लोगों को साइनाइड का स्वाद पसंद नहीं है - जब वे कहते हैं कि यह जहरीला है, तो हर कोई बस "तार्किक" है। यह कोई फर्क नहीं पड़ता कि आप इसे कितना प्यार करते हैं, यह अभी भी आपको मारने वाला है।
शाम

4
PS आप जिस शब्द की तलाश कर रहे हैं वह वाजिब है । इसके अलावा, हर किसी को तर्कसंगत बनाने की प्रवृत्ति होती है, न कि केवल प्रोग्रामर की।
तिमवी

11

पूरी तरह से फैनबॉय की तरह लगने के जोखिम पर, मुझे लगता है कि हर कोई जो दावा करता है कि व्हाट्सएप "कोड में असंगत इंडेंटेशन को कम करने में मदद करता है" ने कभी भी विज़ुअल स्टूडियो का उपयोग नहीं किया है। एकल आदेश के साथ (मुझे लगता है कि डिफ़ॉल्ट शॉर्टकट Ctrl + K, D) है, सभी इंडेंटेशन तुरंत सुसंगत हैं। इसके अलावा, जब कोड चिपकाने पर इंडेंटेशन को बिना कुछ किए ही तुरंत ठीक कर दिया जाता है, और नया कोड लिखते समय ifया किसी अन्य ब्लॉक में किसी चीज को लपेटते समय भी यही सच होता है (रिफॉर्म }को टाइप किया जाता है)। इसके अलावा, एक पूर्ण विवरण के बाद एंटर दबाकर हमेशा कर्सर को अगले स्टेटमेंट के लिए सही इंडेंटेशन स्तर पर रखता है, भले ही पिछले स्टेटमेंट की वजह से आगे इंडेंट किया गया होifया इसी तरह, गलती से यह सोचना बहुत मुश्किल हो जाता है कि एक बयान अभी भी ifनहीं चल रहा है।

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


There (मुझे पता है कि एक विशेष मामला है, जो वीएस रिफॉर्मेट से इनकार करता है, अर्थात् सरणी शाब्दिक जो कई पंक्तियों को फैलाते हैं, लेकिन यह बिंदु के बगल में है।)


8
पायथन इंडेंटेशन को फिक्सिंग की आवश्यकता नहीं है क्योंकि यह टूट नहीं जाता है (किसी को सूचित किए बिना!)। सी # के लिए शुद्ध करना (प्रोग्राम जो मेमोरी लीक का पता लगाने में मदद करता है) लिखना असंभव है, इसका मतलब यह नहीं है कि सी ++ मेमोरी मैनेजमेंट बेहतर है।
dbkk

2
@ डीन: इतने सारे लोग क्यों सोचते हैं कि उन्हें हर चीज़ के लिए रेस्पर की ज़रूरत है? आप जो वर्णन करते हैं, वह पहले से ही दृश्य स्टूडियो में Resharper के बिना है।
तिमवी Tim

2
@dbkk: जैसे ही आप ifकहीं भी एक लाइन जोड़ते हैं, आपका इंडेंटेशन टूट जाता है । फिर आपको मैन्युअल रूप से इंडेंटेशन को ठीक करने के लिए आगे बढ़ना होगा।
तिमवी Tim

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

2
@ केविन: सही, मैं नहीं, और स्पष्ट रूप से, मैं नहीं करना चाहता। मैं एक बार में यह सब तय करने पर जोर देता हूं, जो केवल एक अपठनीय अंतर का कारण बनता है जो केवल महत्वहीन व्हाट्सएप को प्रभावित करता है और भविष्य के सभी भिन्न को ठीक करता है। और कुछ भी परियोजना के लिए प्रतिकूल और हानिकारक होगा।
टिमवी

3

व्यक्तिगत रूप से मुझे लगता है कि मुझे अपने दिमाग को महसूस करने के लिए खुद की लाइन पर एक टोकन होने के द्वारा शुरू की गई रिक्त लाइन की आवश्यकता है, कोड एक और दायरे में है।

अजगर लोगों द्वारा जाने पर मुझे इससे नफरत है:

if something
    do something
    do somethingelse

    cleanup
else
    do the other thing

टोकन भूमि के दौरान, जब लोग कॉपी और पेस्ट करते हैं और इंडेंटेशन को साफ नहीं करते हैं, तो मुझे नफरत होती है ,

if something
{
I have been too lazy
      {
            to clean up
            }
what I pasted
}

या टोकन के लिए एक अलग लाइन का उपयोग न करें

if something {
    I find this confusing
}
else {
especially when combined with the previous 
do something
}

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


3

प्रो: जहां तक ​​मुझे पता है कि पायथन दुनिया में कोई इंडेंटेशन / कर्ली-ब्रेस-प्लेसमेंट पवित्र युद्ध नहीं हैं। डेवलपर्स की ओर से यह निर्णय लेने से शायद कुछ दर्द बचा है।

Con: बेनामी फ़ंक्शन एक पंक्ति तक सीमित हैं। ठीक लगता है, लेकिन मैं अक्सर अपने आप lambdaको स्कीम में मल्टी-लाइन एस लिखता हूं (ज्यादातर एक ही जगह पर mapया इसके लिए फ़ीड करने के लिए apply, इसलिए इसे अलग से घोषित करने का कोई मतलब नहीं होगा)।



पायथन में मल्टी लाइन एक्सप्रेशंस का समर्थन किया जाता है - बस एक लाइन के अंत में \ डाल दिया जाता है।
dbkk

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

@ नॉट - ठीक है, हाँ, निष्पक्ष। पायथन सिर्फ व्हाट्सएप सीमांकित भाषा है जिसका मुझे कोई अनुभव नहीं है। @dbkk तो आप कह रहे हैं कि सिंटैक्स त्रुटि वापस lambda n: a = n \\na.sort() \\na[0:3] नहीं होगी ? `\ _ 'ट्रिक से आप अपनी सिंगल-लाइन लैम्ब्डा को कई लाइनों में फैला सकते हैं, लेकिन आपको अभी भी एक से अधिक वास्तविक लाइन नहीं मिलती हैं ।
इनामाथी

हास्केल, कॉफ़ीस्क्रिप्ट व्हॉट्सएप का उपयोग करते हैं, लेकिन एकल पंक्ति लंबोदर सीमा नहीं है।
aoeu256

3

{} अतिरेक जोड़ता है। बहुत अतिरेक बुरा है, बहुत कम बुरा है। और मैनुअल में प्रवेश करना बुरा है, जासूसी है। अगर इसका उपयोग करने के लिए मुश्किल है।

इसलिए खराब / बिना आईडीई के समय में, व्हाट्सएप शैली थोड़ी बेहतर हो सकती है। लेकिन शक्तिशाली आईडीई के साथ, ब्रेसिज़ बेहतर हैं।


1
आप मुझे लगता है कि अतिरेक के बारे में एक अच्छा मुद्दा बनाते हैं। मैं थोड़ी देर के लिए कंपाइलरों के लिए पार्सर-रिकवरी पर विचार कर रहा हूं (कोड के लिए फिक्स-इट जारी करने के बहुत दिलचस्प प्रयासों के बाद) और जो वास्तव में यहां मदद करता है वह यह है कि अतिरेक है। इसलिए, मुझे लगता है कि कोई अतिरेक नहीं, जबकि एक आदर्श दुनिया में महान, वास्तव में वास्तविक दुनिया प्रोग्रामिंग के लिए हानिकारक है। जब आम तौर पर जानकारी के अनावश्यक स्रोत असहमत होते हैं, तो यह हो सकता है कि एक टाइपो / गलती की गई थी; अतिरेक के बिना, यह संभावित त्रुटि अनिर्धारित हो जाती है! कहा जा रहा है कि, मैं कोई ब्रेसिज़ पसंद नहीं करता;)
मैथ्यू एम।

"शोर" शब्द एरिक मीजर ने अपने हास्केल वीडियो में इस्तेमाल किया था।
user16764

क्या होगा यदि आप एक ब्लॉक को हटाते हैं और आप} को हटाना या विपरीत करते समय गलती से {हटाना चाहते हैं? अतिरेक DRY IMO के विरुद्ध जाता है।
aoeu256

2

व्हाट्सएप भाषा के साथ मुझे जो समस्या मिली वह बहु-पृष्ठ सशर्त अभिव्यक्तियों के साथ थी। पृष्ठ दो के मध्य में एक पंक्ति जोड़ना, और सभी गड़बड़ के बीच में एक स्थान से दूर हो जाना, आपके कोड के तर्क को काफी बदल सकता है। और यहां तक ​​कि अगर किसी का कोड "सही" है, तो इसे पढ़ने की कोशिश एक भयानक अनुमान लगाने का खेल बनाती है। किस "अगर" के लिए यह 'और' है? मैं अदृश्य खाली अक्षरों को गिनने की तुलना में ब्रेसिज़ को बहुत आसान तरीके से गिन सकता हूं। और इस साइट पर पोस्टिंग मशीनरी उन्हें एक ही स्थान पर नष्ट करती रहती है।

IMHO "{{{{{" is more reliable than "     ".

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

1
गंभीरता से, एक सशर्त कई पृष्ठों लंबा?
विंस्टन ईवर्ट

2

मुझे नहीं लगता कि यह वास्तव में एक बनाम है
पायथनर्स अक्सर ब्रेसिज़ प्रोग्रामर की आलोचना करते हैं जैसे कि वे आसानी से इंडेंटेशन का उल्लंघन कर सकते हैं क्योंकि वे कर सकते हैं।
वास्तव में मैंने हमेशा पायथन और इसके इंडेंटेशन स्कूपिंग के बारे में जानने से पहले ही 100% सुसंगत इंडेंटेशन का उपयोग किया।

तथ्य यह है कि ब्रेसिज़ भाषाएं संकलक में सही इंडेंटेशन भी लगा सकती हैं और हमारे पास दोनों दुनिया के सर्वश्रेष्ठ होंगे। देख? कोई बनाम नहीं ।

पायथनर्स तर्क देंगे कि इंडेंटेशन सिंटैक्स का हिस्सा होने पर ब्रेस बेकार हैं, लेकिन वे नहीं हैं, ब्रेस पठनीयता में सुधार करते हैं। मैंने पायथन की प्रोग्रामिंग करने की कोशिश की और यह मेरे लिए बहुत दिलचस्प भाषा है, लेकिन क्या आपने if-elif2 या 3 से अधिक इंडेंटेशन स्तरों की श्रृंखलाएँ आज़माई हैं? वे अब इतने साफ नहीं दिखते।

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

if condition:
    statement
    other_statement()
end

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


मुझे वह वाक्य रचना पसंद है क्योंकि यह एक अच्छा समझौता है और ब्रेसिज़ से बचा जाता है। लेकिन यह एक-लाइन के बयानों के लिए महंगा है, जहां सी में उदाहरण के लिए हम पूरी तरह से ब्रेसिज़ को दूर छोड़ सकते हैं :(
जो सो

नेस्टेड के बजाय अगर ... एलीफ आप शब्दकोशों का उपयोग करने की कोशिश कर सकते हैं, और / या, जारी रखें, वापसी, नेस्टेड फ़ंक्शन ...
aoeu256

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