हास्केल में, मैं अक्सर $ के साथ अभिव्यक्ति लिखता हूं। मुझे यह काफी प्राकृतिक और पठनीय लगता है, लेकिन मैंने कभी-कभी इसे खराब रूप से पढ़ा है और यह समझ में नहीं आता कि यह क्यों होना चाहिए।
उत्तर
निम्नलिखित सभी अच्छे फार्म हैं:
foo = bar . baz . quux
foo x = bar . baz . quux $ x
foo x = (bar . baz . quux) x
foo x = bar (baz (quux x))
मैं उन्हें अपने वरीयता के किसी न किसी क्रम में डाल दिया है, हालांकि हमेशा की तरह स्वाद बदलता है, और संदर्भ एक अलग विकल्प की मांग कर सकते हैं। मैं भी कभी-कभी
foo = bar
. baz
. quux
देखा है जब bar
, baz
, और quux
subexpressions से प्रत्येक लंबे होते हैं। निम्नलिखित खराब फॉर्म है:
foo x = bar $ baz $ quux $ x
दो कारण हैं जो कम बेहतर हैं। सबसे पहले, कम subexpressions की प्रतिलिपि बनाई जा सकती है और refactoring के दौरान एक सहायक परिभाषा में चिपकाया जा सकता है; सभी ($)
ऑपरेटरों के साथ, x
तर्क में केवल उप-अभिव्यक्तियां वैध रेफैक्टरिंग हैं, जबकि (.)
और ($)
ऑपरेटरों के साथ bar . baz
या baz . quux
जैसे उप-अभिव्यक्तियों को भी एक अलग परिभाषा में खींचा जा सकता है।
(.)
को प्राथमिकता देने का दूसरा कारण ($)
की स्थिरता में संभावित परिवर्तन की प्रत्याशा में है; वर्तमान में, ($)
infixr
है, जिसका अर्थ यह सही करने के लिए एकत्रित करती है, इसलिए जैसे:
foo x = bar $ (baz $ (quux $ x))
हालांकि, ($)
अधिक भाव में उपयोगी अगर यह infixl
थे हो सकता है; उदाहरण के लिए,
foo h = f (g x) (h y)
foo h = f $ g x $ h y
foo h = (f $ g x) $ h y
... जो वर्तमान में कोष्ठक के बिना व्यक्त नहीं किया जा सकता है। "बुरा फार्म" उदाहरण है, जब एक infixl
आवेदन के साथ पार्स,
foo x = ((bar $ baz) $ quux) $ x
जो कुछ काफी अलग अर्थ है किया जाएगा। तो, इस फॉर्म से बचकर भविष्य में सबूत साबित करें।
मैंने कभी-कभी 'बार' जैसी चीज़ों को भी देखा है। baz $ quux x' या 'bar (baz। quux $ x)' या अन्य मिश्रण, आमतौर पर जब अन्य इंफिक्स ऑपरेटर शामिल होते हैं, या जब विशिष्ट फ़ंक्शन अनुप्रयोगों को अवधारणात्मक रूप से जोर दिया जाता है। –
आईएमओ, फिक्सिटी तर्क इस तथ्य से कम आकर्षक है कि रचनात्मक शैली आपको पाइपलाइन को एक साधारण कट-एंड-पेस्ट के साथ एक फ़ंक्शन में दोबारा करने की सुविधा देती है। – ehird
इसकी वर्तमान स्थिरता के साथ, यदि आपके पास 'bar $ baz $ quux $ x' है, तो यह' बार के बराबर है। बाज़ quux $ x'। उत्तरार्द्ध, निश्चित रूप से, पूर्व पर प्रोत्साहित किया जाता है। –
- 1. लॉजिकल ऑपरेटर ओवरलोडिंग खराब अभ्यास माना जाता है?
- 2. क्या "उदाहरण" ऑपरेटर का यह उपयोग खराब डिजाइन माना जाता है?
- 3. सी ++ 11 में, ... ऑपरेटर माना जाता है?
- 4. किसी ऑब्जेक्ट "खराब फॉर्म" के माध्यम से स्थिर विधियों को कॉल कर रहा है? क्यूं कर?
- 5. वैश्विक चर क्यों खराब अभ्यास माना जाता है?
- 6. आउटपुट बफरिंग का उपयोग खराब अभ्यास माना जाता है?
- 7. वर्डप्रेस को खराब प्रोग्राम क्यों माना जाता है?
- 8. जावा बाइटकोड "अत्यधिक" संख्या को "खराब" कोड माना जाता है?
- 9. हास्केल डॉलर ऑपरेटर एप्लिकेशन
- 10. क्या यह स्मृति रिसाव माना जाता है?
- 11. क्या jQuery एक भाषा माना जाता है?
- 12. org.hibernate.Session.clear() हानिकारक माना जाता है?
- 13. परिपत्र संदर्भ क्यों हानिकारक माना जाता है?
- 14. शैली हानिकारक माना जाता है?
- 15. PKG_CHECK_MODULES हानिकारक माना जाता है?
- 16. क्या इसे एक निर्माता में लंबे संचालन करने के लिए खराब डिजाइन माना जाता है?
- 17. हास्केल जीएलयूटी लाइब्रेरी में ($ =) (डॉलर बराबर) ऑपरेटर क्या करता है?
- 18. सी ++ में एक छोटी वस्तु को क्या माना जाता है?
- 19. क्या इसे संग्रह प्रकारों के बीच परिवर्तित करने के लिए खराब रूप माना जाता है?
- 20. क्या यह इकाई निकाय के बिना HTTP पोस्ट करने के लिए खराब अभ्यास माना जाता है?
- 21. क्या यह गैर-मानक HTML विशेषताओं का उपयोग करने के लिए खराब अभ्यास माना जाता है?
- 22. क्या यह सामान्य रूप विफलता माना जाता है?
- 23. जावास्क्रिप्ट में खराब अभ्यास माना जाता है के साथ '(सूची में var आइटम)' क्यों है?
- 24. strtok क्यों है() असुरक्षित माना जाता है?
- 25. '।' है सदस्य पहुंच के लिए जावा में एक ऑपरेटर माना जाता है?
- 26. क्या कॉपी कन्स्ट्रक्टर से डिफ़ॉल्ट असाइनमेंट ऑपरेटर को कॉल करने के लिए यह खराब फॉर्म है?
- 27. एक्शन.इनवोक का उपयोग कर सबसे अच्छा अभ्यास माना जाता है?
- 28. $ .cache कब बहुत बड़ा माना जाता है?
- 29. पर्ल ऑपरेटर: $ | ++; डॉलर साइन पाइप प्लस प्लस
- 30. स्कैला में टाइप स्टाइल और टाइप कैस्ट को खराब शैली क्यों माना जाता है?
क्या आपके पास कोई संदर्भ है जहां इसे खराब रूप के रूप में वर्णित किया गया है? – bobbymcr
संक्षिप्त उत्तर: नहीं। –