2017-09-25 8 views
7

मैं कई अलग-अलग स्थानों को देखता हूं जो वर्दी प्रारंभिक recommended है। हर्ब सटर recommends यह, और का उपयोग करने के लिए एक सूची देता है। ऐसा लगता है कि सामान्य सर्वसम्मति इस वाक्यविन्यास का उपयोग करना है।क्यों समान प्रारंभिक (ब्रेसिज़ के साथ प्रारंभिक) की सिफारिश की जाती है?

हालांकि, मुझे नहीं लगता कि क्यों। इसमें std::initializer_list की समस्या है प्राथमिकता। कक्षा में std::initializer_list जोड़ना कोड तोड़ सकता है। टेम्पलेट्स के साथ, इसका उपयोग करने की अनुशंसा नहीं की जाती है। ऐसा लगता है कि "पुराने" तरीके से अधिक अपवाद हैं। इन समस्याओं में से कोई भी पुरानी विधि के साथ अस्तित्व में नहीं था।

मैं यह देखने में असफल रहा कि समान प्रारंभिकता क्यों बेहतर है। मेरा निष्कर्ष () सिंटैक्स का उपयोग करना जारी रखना है, और std::initializer_list के साथ एक कन्स्ट्रक्टर को कॉल करने के मामले में {}केवल का उपयोग करना है।

क्यों? वर्दी प्रारंभिक क्या देता है?

  • संकीर्ण करने से मना करता है: अच्छी सुविधा। लेकिन, जैसा कि मैंने चेतावनी को संकुचित कर दिया है सभी मेरा कोड (क्योंकि मैं अपने कोड में सभी संकुचनों को जानना चाहता हूं, न केवल प्रारंभिकताओं पर), मुझे इस सुविधा की बहुत आवश्यकता नहीं है।
  • सबसे परेशान पार्स: हाँ, यह एक समस्या है, लेकिन मैंने इसे बहुत ही कम से कम मारा। तो यह स्विच करने के लिए एक कारण नहीं है (मेरे लिए)। यह स्थान, मैं {} का उपयोग कर सकता हूं।
  • क्या कुछ और है (शायद, मैं अभी भी सी ++ की नई विशेषताएं सीख रहा हूं)?

"पुराने" तरीके से, याद रखने के लिए कोई नियम नहीं थे, कोई संभावित ब्रेक-ऑफ-कोड नहीं था। बस इसका इस्तेमाल करें, और कभी-कभी, बहुत ही कम ही, आप सबसे अधिक परेशान पार्स मारा। बस इतना ही।

क्या मेरी सोच कहीं गलत है?

+7

यह जानने में मदद करता है कि चीजें क्या काम करती हैं और क्या चीजें हैं। 'एफ (जी(), एच (जे, i));' एफ (जी {}, एच (i, j)) से कम स्पष्ट है; '। यह तब भी मायने रखता है जब चर के उचित नाम होते हैं। – nwp

+0

@nwp: yepp, यह एक वैध तर्क है। लेकिन, मेरे पास एक नामकरण सम्मेलन है जहां मैं तुरंत प्रकार देख सकता हूं। इसके अलावा, वर्तमान अच्छे आईडीई कुछ माध्यमों (रंग, इटैलिक, जो भी हो) के बीच अंतर दिखा सकते हैं। – geza

+4

आपके नामकरण सम्मेलन का पालन एसटीएल या विभिन्न अन्य पुस्तकालयों द्वारा नहीं किया जाता है। लेकिन निश्चित रूप से, यदि आप कुछ बाहरी उपकरणों के साथ ब्रेसिड प्रारंभकर्ताओं की अधिकांश विशेषताओं को प्रतिस्थापित करते हैं और अकेले काम करते हैं या आपके आसपास के हर किसी को ऐसा करने के लिए मजबूर करते हैं तो आपको उनकी आवश्यकता नहीं होती है। हर सी ++ सुविधा हर किसी के लिए समझ में नहीं आता है। – nwp

उत्तर

0

ऐसा लगता है कि आपके पास तकनीकी पहलुओं पर एक सभ्य पकड़ है और nwp ने अन्य चिंताएं उठाईं जिनमें टिप्पणियों में स्पष्टता, स्पष्टता, उल्लेख किया गया था। इसलिए मुझे लगता है कि आपके पास निर्णय लेने के लिए आवश्यक जानकारी है।

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

और निष्पक्ष होने के लिए, ऐसा लगता है कि आपने इसे स्टाइल और टूल पर चिपके हुए इसे संबोधित करने की कोशिश की है जो इसे संबोधित करने में मदद करता है। मानक तर्क, nwp के रूप में शुरू हुआ, यह है कि कई लोग भाषा में बनाए गए नामकरण सम्मेलनों से विचलित होने के साथ ठीक नहीं हैं, न ही आईडीई का उपयोग कर। मैं व्यक्तिगत रूप से उस तर्क के साथ सहानुभूति व्यक्त करता हूं लेकिन यह भी समझता हूं कि कई लोग इसे पुराने रूप में या यहां तक ​​कि एक गैर-मुद्दे (विशेष रूप से आईडीई के मामले में) के रूप में क्यों न मानते हैं।

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

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

दिन के अंत में, मुझे लगता है कि यही कारण है कि लोग इसे अनुशंसा करने के लिए पर्याप्त पसंद करते हैं। यह ऐसी चीज है जो महत्वपूर्ण होने पर आपके साथ रह सकती है।


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

बिंदु पर पहुंचने के लिए, सभी के पास अलग-अलग परिस्थितियां और प्राथमिकताएं हैं। इस तरह की बढ़ोतरी जैसी विशेषताएं लोग अपनी कोड गुणवत्ता/पठनीयता में सुधार कर सकते हैं, जबकि अभी भी जो भी बाधाएं हो सकती हैं (स्वयं लगाया गया है या अन्यथा)।

+0

सामान्य में, मैं आपसे सहमत हूं। मैं बस इस मुद्दे को देखने में असफल रहा हूं। कई मामलों में, यह कोई फर्क नहीं पड़ता कि 'a()' एक फ़ंक्शन कॉल या कन्स्ट्रक्टर है या नहीं। दोनों एक वस्तु "रिटर्न"। एकमात्र चीज जो मैं स्वीकार करता हूं वह यह है कि '{}' कोड को थोड़ा बेहतर समझने में मदद कर सकता है। लेकिन जब आप किसी और कोड को समझने की कोशिश करते हैं, तो आप उसके लिए बेहतर उपकरण का उपयोग कर सकते हैं। उदाहरण के लिए, एक डीबगर के साथ, आप कोड को ले जाने वाले पथ को बहुत आसान बना सकते हैं, आदि। विरासत कोड के लिए चेतावनियां सक्षम करने का आपका बिंदु बिल्कुल मान्य है। – geza

+0

तो हाँ, अंतर परिस्थितियों, वरीयताएं हैं। यही कारण है कि यह मेरे लिए अजीब बात है कि '{} 'को कुछ बेहतर माना जाता है, और सामान्य सलाह है:" इसका उपयोग करें "। मेरी राय में, यह सलाह कुछ और परिष्कृत में बदल दी जानी चाहिए। – geza

+0

@geza इस तरह सलाह है, मुझे लगता है। मैं इस तरह की सलाह पढ़ता हूं जैसे कि एक अंतर्निहित "यदि आपके पास कोई कारण नहीं है।" अक्सर मुझे लगता है कि एक नए प्रोग्रामर एक उपयोगी सुविधा लिखने के लिए उस तर्क का उपयोग कर सकते हैं, तो लोग उन अस्वीकरण सहित स्पष्ट रूप से सतर्क हैं। इसके अलावा, विशेष रूप से सी ++ जैसी भाषा के लिए, मुझे लगता है कि लोग ऐसी सुविधाओं के पक्ष में हैं जो संकलक आपके लिए अतिरिक्त काम करते हैं और भरोसा करते हैं कि आप सीखेंगे कि जारी रखने से पहले वास्तव में क्या त्रुटि है, और इसे शुद्ध लाभ के रूप में देखें उस प्रकाश में। – thesquaregroot

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