क्लोजर शैली (और सामान्य रूप से अच्छी सॉफ्टवेयर इंजीनियरिंग) कई छोटे कार्यों पर जोर देती है, जिनमें से एक उप-समूह बाहरी इंटरफेस प्रदान करने के लिए सार्वजनिक रूप से दिखाई देता है।क्लोजर शैली: defn-vs. letfn
Clojure में वहाँ तरीके यह करने के लिए की एक जोड़ी होने लगते हैं:
(letfn [(private-a ...)
(private-b ...)]
(defn public-a ...)
(defn public-b ...))
(defn- private-a ...)
(defn- private-b ...)
(defn public-a ...)
(defn public-b ...)
letfn प्रपत्र अधिक वर्बोज़ और शायद कम लचीला लगता है, लेकिन यह काम करता है के दायरे कम करता है।
मेरा अनुमान है कि Letfn केवल अन्य रूपों के अंदर उपयोग के लिए है, जब केवल एक छोटे से क्षेत्र में छोटे सहायक कार्यों का उपयोग किया जाता है। क्या यह सर्वसम्मति है? क्या कभी भी शीर्ष स्तर पर उपयोग किया जाना चाहिए (जैसा कि मैंने पहले अनुशंसित देखा है)? इसका इस्तेमाल कब किया जाना चाहिए?
क्या आपको लगता है कि सामान्य रूप से सहायक कार्यों के लिए 'letfn' उपयुक्त नहीं है - उपयोगकर्ता का उपयोग 24244739 का उल्लेख किया गया है - लेकिन केवल पारस्परिक रिकर्सन के लिए? मुझे 'letfn' के साथ सामान्य रूप से क्या किया जाता है, इसके लिए मुझे कोई एहसास नहीं है, इसलिए मैं मूर्खतापूर्ण हो सकता हूं, लेकिन मैं अक्सर' letfn', या कभी-कभी '(चलो [f (fn [x] ...) का उपयोग करके सहायक कार्यों को परिभाषित करता हूं। ..] ''let' और' letfn' का उपयोग करने से बचने के लिए। – Mars
मुझे लगता है कि 'letfn' या' (चलो [f (fn [x] ... 'जैसा कि ठीक है। मैं हमेशा यही करता हूं यह शीर्ष स्तर पर परिभाषित कार्यों की संख्या को कम करता है, जिसे मैं एक अच्छी चीज़ के रूप में देखता हूं। –
स्पष्ट करने के लिए, हालांकि, मैं 'deff' * के भीतर' letfn' * का उपयोग करता हूं। कुछ '(defn top-level-fn [xs] (letfn [(सहायक [y] (y-do-something-y के साथ))] (मानचित्र सहायक xs))) –