2014-12-30 6 views
6

मैं तरह मेरे कोड में प्रतीकों की स्थापना की गई थी:रूबी प्रतीक सेटअप

"name_of_symbol".to_sym 

लेकिन, मेरा प्रिंसिपल इंजीनियर इसे एक बुरा अभ्यास के रूप में कोड की समीक्षा के दौरान उठाया और मेरे जैसे प्रतीकों बनाने के लिए कहा:

:"name_of_symbol" 

जब मैंने उनसे पूछा क्यों? उन्होंने कहा कि यह बुरा अभ्यास है, लेकिन जब मैंने पूछा कि किस कारण से उसने अभी कहा है, जो वास्तव में एक संतोषजनक उत्तर नहीं है। तो यह कैसे होता है? क्या कोई अंतर है?

+5

ऐसा लगता है कि यह आपके कार्यस्थल पर सम्मेलन है, एक "बुरा अभ्यास" होने का सवाल इतना नहीं है। सम्मेलन सिर्फ इतना है कि, बहस करने की कोई आवश्यकता नहीं है (हम "पेड़" को "पेड़" क्यों कहते हैं, न कि "ग्लफ"? क्योंकि हम "पेड़" का उपयोग करने के लिए सहमत हुए हैं)। कुछ लोग "पठनीयता" का तर्क दे सकते हैं - लेकिन साबित करने के लिए एक वास्तविक वैज्ञानिक अध्ययन किए बिना: sym वाक्यविन्यास इसे पढ़ने का आसान है, यह सिर्फ एक दावा है। दूसरी तरफ, अगर लड़के ने स्पष्टीकरण देने से इनकार कर दिया कि कुछ ऐसा है जो हम आपकी मदद नहीं कर सकते :(मेरा लेना: 'sym' के साथ एक प्रतीक परिभाषित करें, लेकिन प्रतीकों के स्पष्ट रूपांतरण के लिए '.to_sym' का उपयोग करें। –

+4

यह है खराब अभ्यास नहीं है। खराब अभ्यास प्रोजेक्ट पर टीम लीड होने पर कुछ समझाने में असमर्थ होना चाहिए। –

+0

यह एक अच्छा अभ्यास नहीं है। ध्यान दें कि यदि आपके प्रतीक में सफेद जगहें नहीं हैं और अन्य उद्धरण नहीं देते हैं अक्षर हैं जो अस्पष्ट रूबी पार्सर द्वारा व्याख्या की जा सकती तो ':। foo_bar' ठीक उद्धरण चिह्नों के बिना है, तो आप केवल' के लिए उद्धरण की जरूरत है:। "foo बार" ' –

उत्तर

3

अन्य उत्तर सही ढंग से लोगों का तर्क है :"foo bar" बेहतर है "foo bar".to_sym क्योंकि यह स्पष्ट है, बेहतर अपने इरादे को व्यक्त करता है, अधिक पठनीय, तेज आदि है लेकिन वहाँ एक और कारण है: "foo bar".to_symString#to_sym विधि पर निर्भर करता है, और वहाँ एक संभावना है (हालांकि रिमोट) कि इस विधि को फिर से परिभाषित किया जा सकता है। यह एक गैर-कॉस्मेटिक कारण है कि :"foo bar" सिद्धांत रूप से बेहतर अभ्यास में है।

+3

सच है, हालांकि 'to_sym' को फिर से परिभाषित करने से निश्चित रूप से दुनिया भर में दंगों का कारण बन जाएगा। –

+0

यह निश्चित रूप से होगा। यह मूल रूप से एक पूरी तरह से सैद्धांतिक तर्क है। –

6

कोलन एक प्रतीक इंगित करता है। मैं इसे अपरंपरागत अभ्यास के रूप में इतना बुरा अभ्यास नहीं कहूंगा, जो कोड को समझने में थोड़ा कठिन बना सकता है। बहुत मैं हूँ -

मुझे पता है कि :"Some weird stuff" कानूनी है, लेकिन यह पसंद नहीं है, व्यक्तिगत रूप से मैं नहीं बल्कि :Some_weird_stuff का उपयोग करें और उद्धरण सभी को एक साथ बाहर छोड़ चाहते हैं - जब आप सिर्फ शोर जोड़ने की जरूरत नहीं है उद्धरण का उपयोग कर विरोधी शोर। शोर खराब अभ्यास है, यह समझ में अधिक समय लगता है।

कभी-कभी, जब आप तारों के रूप में आने वाली चीजों से मेल खाते हैं लेकिन स्थिरता के लिए आप प्रतीकों के लिए चाहते हैं तो आपके पास अधिक विकल्प नहीं है, लेकिन मुझे यह प्रश्न पूछना नहीं है, FWIW।

आप वाक्य रचना स्वच्छ प्रतीक हैं जब आप

{ thing: "value" } 

वाक्य रचना है, जो एक खुशी और बहुत स्पष्ट और सुव्यवस्थित उपयोग कर सकते हैं।

दिलचस्प है, हालांकि:

irb 
> class String ; def to_sym ; puts "bob" ; end ; end 
    => nil 
> "fred".to_sym 
    bob 
    => nil 
> :"fred" 
    => :fred 

तो बोरिस 'बिंदु एक वैध एक है।

+0

मुझे शायद अपने प्रश्न में ध्यान रखना चाहिए कि यह कई बार जब प्रतीक गतिशील रूप से array.each {| s | : "# {s}" } तो मेरे रास्ते से यह "# {s}" होगा। To_sym –

+4

तो आपके पास एक स्ट्रिंग है और आप कर रहे हैं: "# {s}" - व्यक्तिगत रूप से मैं चाहता था to_sym के साथ जाएं, एक स्ट्रिंग को इंटरपोलेट करें और फिर पृष्ठभूमि में फ्लाई पर to_sym को कॉल करें ... थोड़ा सा व्यर्थ, मुझे लगता है :) – Ghoti

+3

दूसरे शब्दों में, '# {s} "' या '" # {s} "। to_sym', बस' s.to_sym' – Ajedi32

4

एक Symbol शाब्दिक है, दूसरा String शाब्दिक है जिस पर आप एक विधि कहते हैं।

व्यक्तिगत रूप से, मैं यह अजीब एक String लिखने के लिए जब आप एक Symbol लिखने के लिए, केवल करने के लिए तो तुरंत एक Symbol में String परिवर्तित मतलब पाते हैं। पहली जगह Symbol क्यों नहीं लिखें? इससे आपके इरादे बहुत स्पष्ट हो जाते हैं।

+1

करना होगा यह नहीं अजीब, उदाहरण के लिए, कुछ विधि एक स्ट्रिंग लौटाता है यदि है, तो 'method_which_returns_a_string.to_sym' जाना –

+0

@RustamA तरीका है। Gasanov: लेकिन यह सवाल नहीं है कि यह सवाल क्या है। प्रश्न स्ट्रिंग अक्षर के विपरीत सीधे प्रतीक प्रतीक का उपयोग करने के बारे में है जो तब एक प्रतीक में परिवर्तित हो जाता है। जाहिर है, एक पूरी तरह से अलग सवाल का एक पूरी तरह से अलग जवाब हो सकता है। –

2

यह प्राथमिकता का मामला की तरह लगता है, लेकिन मैं देख सकते हैं कि एक प्रतीक के रूप में प्रतीक लेखन एक स्ट्रिंग है कि आप एक प्रतीक में बदल रहे हैं लिखने की तुलना में एक बहुत स्पष्ट है।

इसके अलावा, जब आप सांप_case का उपयोग कर रहे हों तो उद्धरण चिह्न अनावश्यक हैं।

  1. "name_of_symbol".to_sym
  2. :"name_of_symbol"
  3. :name_of_symbol

यह शैली की बात है, लेकिन मुझे लगता है कि 3 तीन का सबसे पठनीय और संक्षिप्त संस्करण है। यदि "सर्वोत्तम अभ्यास" का अर्थ पढ़ने में आसान है और इसलिए बनाए रखना है, तो मैं 3 जीत कहूंगा।

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