सवाल जावा स्विच मामलों: ब्रेसिज़ के साथ या बिना?


ब्रेसिज़ के साथ निम्नलिखित दो स्निपेट पर विचार करें:

switch (var) {
  case FOO: {
    x = x + 1;
    break;
  }

  case BAR: {
    y = y + 1;
    break;
  }
}

ब्रेसिज़ के बिना:

switch (var) {
  case FOO:
    x = x + 1;
    break;

  case BAR:
    y = y + 1;
    break;
}

मुझे पता है कि, ब्रेसिज़ के साथ स्निपेट में, प्रत्येक मामले को ब्रेसिज़ में संलग्न करके एक नया दायरा बनाया जाता है। हालांकि, अगर प्रत्येक मामले को नए दायरे की आवश्यकता नहीं है (यानी कोई परिवर्तनीय नाम पुन: उपयोग नहीं किया जा रहा है), क्या किसी मामले के साथ ब्रेसिज़ का उपयोग करने के लिए प्रदर्शन का कोई भी प्रकार है?


74
2018-03-11 06:00


मूल




जवाब:


क्या किसी मामले के साथ ब्रेसिज़ का उपयोग करने के लिए प्रदर्शन का कोई दंड है?

कोई नहीं।

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


80
2018-03-11 06:05





यह एक चरम समयपूर्व अनुकूलन का उदाहरण। चिंता करना और डीबग करना आसान तरीका है, इस बारे में चिंता करना एक बेहतर विचार होगा।


21
2018-03-11 06:20



या ... शायद मैं सिर्फ उत्सुक था? - cdmckay
माना। यह जानने का एकमात्र तरीका है कि ऑप्टिमाइज़ेशन समय से पहले हो सकता है या नहीं, इन प्रकार के प्रश्न पूछना है। - Jason S
यार, आप पर खुदाई करने के लिए नहीं था। लेकिन, मैं हमेशा खुद को याद दिलाने की कोशिश करता हूं कि पठनीयता कोड का सबसे महत्वपूर्ण पहलू है। - Travis


निष्पादन बिंदु से कोई प्रदर्शन जुर्माना नहीं।

एक संकलन बिंदु से थोड़ा प्रदर्शन जुर्माना क्योंकि पार्स के लिए और भी कुछ है, लेकिन अगर कोई वास्तव में इसके बारे में चिंतित था तो उन्हें एक कोड पर अपना कोड लिखना होगा :-)

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


16
2018-03-11 06:24



दर्द के लिए +1 सोचा - Travis
मैं थोड़ी उत्सुक हूं क्योंकि मैं खुद को जवाब नहीं देख सकता ... @ टोफूयर, आपको ब्रेसिज़ जोड़ने के लिए कब करना है? इसके अलावा, मैं पूरी तरह से रखरखाव बिंदु से सहमत हूं, मुझे केवल रखरखाव समस्या एटीएम नहीं दिख रहा है। संपादित करें: कभी नहीं। मैंने बस नीचे दिए गए बाकी उत्तरों को पढ़ा है। - nyaray
आप कुछ मामलों में सी ++ में करते हैं, इसलिए यदि आप दोनों भाषाओं में काम करते हैं तो यह भी एक बुरी आदत नहीं है। - TofuBeer


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

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

यानी जब मेरे पास कुछ ऐसा होता है,

switch(i)
{
  case 1 :
  {
     //do something
  }
  System.out.println("Hello from 1");

  case 2: 
  ....
}

"1 से हैलो" मुद्रित हो जाता है। लेकिन घुंघराले ब्रेस का उपयोग एक अज्ञानी पाठक का सुझाव दे सकता है कि मामला '}' के साथ समाप्त होता है, पहले से ही यह जानकर कि घुंघराले ब्रेसिज़ आमतौर पर लूप, विधियों आदि के मामले में क्या इंगित करते हैं।

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

तकनीकी रूप से बोलते समय आप वैध वाक्यविन्यास के साथ उपयोग किए जाने पर घुंघराले ब्रेसिज़ की एक अतिरिक्त जोड़ी के साथ अपने कोड के किसी भी ब्लॉक को घेर सकते हैं। स्विच में ब्रेसिज़ का उपयोग करना कम से कम मेरे लिए इतना बुरा लगता है क्योंकि ऐसा लगता है कि मैंने उपरोक्त कहा है।

मेरा सुझाव: बस स्विच मामलों के लिए आसपास के ब्रेसिज़ का उपयोग करने से बचें।


12
2018-03-11 10:55



इसके साथ असहमत। ब्रेसिज़ का उपयोग करके ब्रेसिज़ के बाहर कोड लिखना बहुत बुरा फॉर्म होगा, हां, लेकिन यह ब्रेसिज़ के उपयोग को खुद ही बदनाम नहीं करता है। - caseif


ब्रेसिज़ के साथ।

ऐसी कई चीजें हैं जो स्विच स्टेटमेंट्स में गलत हो सकती हैं, मैं उनसे बचने की कोशिश करता हूं जहां मैं कर सकता हूं, यानी।

  1. ब्रेक को भूलना और इस तरह मामले में गिरावट आ रही है
  2. एक डिफ़ॉल्ट मामला भूलना और इस प्रकार स्थिति के लिए एक गैर-catered पकड़ नहीं है
  3. केस स्टेटमेंट्स के बीच आकस्मिक रूप से पुन: उपयोग करने वाले चर, या फिर भी बदतर, एक चर को प्रभावित करते हैं जो केस स्टेटमेंट्स के बीच एक चर साझा कर रहा है।

ब्रेसिज़ का उपयोग केस स्टेटमेंट्स के बीच चर के जानबूझकर और आकस्मिक साझाकरण को रोकने का एक तरीका है


8
2018-03-11 06:27



अंक 1 और 2 सहित इस प्रश्न के लिए भ्रामक था (मेरे लिए); आपकी समापन रेखा स्पष्ट रूप से कहनी चाहिए कि ब्रेसिज़ केवल 3 हल करता है - मैंने सोचा था कि आप का मतलब है कि ब्रेसिज़ ने ब्रेक की आवश्यकता को रोक दिया, फिर कोशिश की। - ataulm
प्वाइंट 3 भी समझ में नहीं आता है। जब तक वे स्विच स्टेटमेंट के अभिभावक दायरे में घोषित नहीं किए जाते हैं, तब तक आप चर का पुन: उपयोग नहीं कर सकते हैं। इसका अर्थ यह है कि यदि आप किसी मामले में एक चर घोषित करते हैं, तो इसका उपयोग किसी अन्य केस स्टेटमेंट में नहीं किया जा सकता है। यदि आप स्विच कथन (अभिभावक दायरे में) के ऊपर एक चर घोषित करते हैं तो इससे कोई फर्क नहीं पड़ता कि आप ब्रेसिज़ का उपयोग करते हैं या नहीं, केस स्टेटमेंट में चर के लिए पहुंच होगी। - dsingleton


यह सवाल शायद "तर्कवादी" (ब्रैस युद्ध!) के रूप में बंद होने जा रहा है लेकिन बिल्ली क्या है। मुझे मामलों के बाद वास्तव में ब्रेसिज़ पसंद है। मेरे लिए यह बदसूरत स्विच वाक्यविन्यास को बाकी भाषा संरचनाओं की तरह दिखता है। (इस "मामले" में ब्रेसिज़ का उपयोग करने के लिए कोई दंड नहीं है)


5
2018-03-11 06:07



मुझे लगता है कि यह एक तरह का एक उद्देश्य सवाल है ... मैं तर्कसंगत चीज वापस लेता हूं - Andy White
मैं इसे ब्रेसिज़ के बिना पसंद करता हूं ... मुझे लगता है कि ब्रेसिज़ बहुत सारे अनियंत्रित शोर जोड़ते हैं। - cdmckay
हाँ, मेरी इच्छा है कि यह इस तरह अधिक था: मामला (भोजन) {x = x + 1} केस (बीएआर) {y = y + 1} - Andy White
संवेदनशील सफेद जगह == अच्छा। अनावश्यक ब्रेसिज़ == चूसना। - Shog9♦
व्हाइटस्पेस == टैब और रिक्त स्थान का मिश्रण == चूसना (बस सोचा कि मैं मिश्रण में एक टैब बनाम अंतरिक्ष टिप्पणी फेंक दूंगा) - Andy White


आप कहते हैं कि ब्रेसिज़ को छोड़ा जा सकता है क्योंकि कोई चर नामों का पुन: उपयोग नहीं किया जा रहा है। परिवर्तनीय नामों का पुन: उपयोग करके, मुझे लगता है कि आप एक ही प्रकार के एक नए चर घोषित करने का मतलब है।

ब्रेसिज़ वास्तव में यह सुनिश्चित करने के लिए सबसे उपयोगी होते हैं कि आप एक ही वैरिएबल को अलग-अलग उपयोग करने का अंत नहीं करते हैं caseगलती से है। वे आज किसी भी चर घोषित नहीं करते हैं, लेकिन कोई उन्हें कल जोड़ देगा और ब्रेसिज़ के बिना कोड त्रुटि-प्रवण होगा।


5
2018-03-11 06:13





मैं स्विच मामलों के लिए ब्रेसिज़ का उपयोग नहीं करता।

  • स्विच स्टेटमेंट पहले से ही ब्रेसिज़ के बिना पर्याप्त बारोक दिखता है।

  • स्विच मामलों को बहुत छोटा होना चाहिए। जब आपको चर घोषित करने की आवश्यकता होती है तो यह एक संकेत है कि आप इसे गलत कर रहे हैं।

अब कुछ विरासत सी कोड को बनाए रखने के लिए जो 500+ लाइनों के खेल स्विच मामलों ...


3
2018-03-11 09:42





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

कोई ब्रेसिज़ नहीं ... कम वाक्यविन्यास अधिक है


1
2018-03-11 06:55



{और} चीजों को भी खड़ा कर देता है, जो इसे पढ़ने में आसान बनाता है (आईएमओ)। - TofuBeer
हर किसी की राय है - Gareth Davis
हाँ। मैं एक विधि की एक कहानी साझा करने जा रहा था जिसे मुझे संशोधित करना पड़ा था (मुझे कोड की एक पंक्ति जोड़ने के लिए लगभग 4 घंटे लग गए थे) लेकिन कोड पागल था (मुद्रित होने पर लगभग 10 पृष्ठ लंबा और 4 पृष्ठ चौड़ा) इसलिए यह नहीं है ठेठ मामला लेकिन अगर उसने {} का उपयोग किया था तो उसे जोड़ने के लिए एक मिनट लग जाएगा। - TofuBeer
मुझे लगता है कि बिंदु यहां है कि यदि मूल प्रोग्रामर {} ब्लॉक डालने के प्रयास में चला गया था ताकि कोड अधिक पठनीय हो, तो उन्होंने वास्तव में देखभाल की हो सकती है कि वे 10 पेज स्विच स्टेटमेंट लिखते हैं और कोड को बदलते हैं थोड़ा कम पागल - Gareth Davis
swtich एक सपना देखा होगा .. यह / nelses घोंसला था ... सीओबीओएल प्रोग्रामर द्वारा सी ++ कोड में लिखा ... मैं उसके बाद लंबे समय से बाहर नहीं छोड़ दिया। - TofuBeer