ठीक है, अब धोखा नहीं है।कार्यात्मक क्लोजर या अनिवार्य ग्रोवी अधिक पठनीय है?
नहीं, वास्तव में, एक या दो मिनट लें और इसे आजमाएं।
"पदों" क्या करता है?
संपादित करें: cgrand के सुझाव के अनुसार सरलीकृत।
(defn redux [[current next] flag] [(if flag current next) (inc next)])
(defn positions [coll]
(map first (reductions redux [1 2] (map = coll (rest coll)))))
अब, इस संस्करण के बारे में कैसे?
def positions(coll) {
def (current, next) = [1, 1]
def previous = coll[0]
coll.collect {
current = (it == previous) ? current : next
next++
previous = it
current
}
}
मैं Clojure सीख रहा हूँ और मैं इसे प्यार कर रहा हूँ, क्योंकि मैं हमेशा कार्यात्मक प्रोग्रामिंग का आनंद लिया। मुझे क्लोजर समाधान के साथ आने में लंबा समय लगा, लेकिन मुझे को एक सुरुचिपूर्ण समाधान के पर विचार करना पड़ा। ग्रोवी समाधान ठीक है, लेकिन मैं उस बिंदु पर हूं जहां मुझे इस प्रकार के अनिवार्य प्रोग्रामिंग उबाऊ और मैकेनिकल मिलते हैं। जावा के 12 साल बाद, मुझे क्लोजर के साथ एक रट और कार्यात्मक प्रोग्रामिंग में महसूस होता है जो मुझे चाहिए।
ठीक है, बिंदु पर जाएं। खैर, मुझे ईमानदार होना है और कहना है कि मुझे आश्चर्य है कि अगर मैं क्लोजर कोड को समझूंगा तो मैं महीनों बाद वापस जाऊंगा। निश्चित रूप से मैं इसे बिल्ली से बाहर टिप्पणी कर सकता हूं, लेकिन मुझे इसे समझने के लिए अपने जावा कोड पर टिप्पणी करने की आवश्यकता नहीं है।
तो मेरा सवाल यह है: क्या यह कार्यात्मक प्रोग्रामिंग पैटर्न के लिए और अधिक उपयोग करने का सवाल है? क्या कार्यात्मक प्रोग्रामिंग गुरु इस कोड को पढ़ रहे हैं और इसे समझने के लिए हवा ढूंढ रहे हैं? कौन सा संस्करण आपको समझने में आसान लगता है?
संपादित करें: यह कोड क्या करता है खिलाड़ियों की स्थिति की गणना उनके बिंदुओं के अनुसार करते हैं, जबकि बंधे लोगों का ट्रैक रखें। उदाहरण के लिए:
Pos Points
1. 36
1. 36
1. 36
4. 34
5. 32
5. 32
5. 32
8. 30
उत्कृष्ट प्रतिक्रिया। मुझे आपके संस्करण से प्यार है। मैं स्वीकार करूंगा कि इसे पाने में मुझे कुछ समय लगेगा। यह काफी चालाक है! धन्यवाद। – foxdonut