पूरे पिछले वर्ष के लिए मुझे स्काला कोड (जावा पृष्ठभूमि से आने वाला) लिखा गया है । मुझे वास्तव में पसंद आया कि आप कैसे सरल और क्लीनर कोड बना सकते हैं, जिसमें वैल, केस क्लासेस, मैप / फिल्टर / लैम्ब्डा फंक्शंस, इंप्लिकेशन्स और टाइप इनफैक्शन शामिल हैं। मैंने इसका उपयोग ज्यादातर अक्का- आधारित अनुप्रयोग के लिए किया है।
इस साल मैं एक नई टीम के साथ स्काला प्रोजेक्ट पर हूं, जो वास्तव में कार्यात्मक प्रोग्रामिंग पसंद करता है। वे स्कैलाज़ का भारी उपयोग करते हैं , और कोड को हर जगह एप्लिकेशंस, संदर्भ सीमा, रीडर / लेखक / स्टेट मोनाड से भरा जाता है, यहां तक कि मुख्य विधि I / O मोनड में "लिपटा" है। उनका तर्क यह है कि यह संकलक "हमारे लिए काम करता है" यह सुनिश्चित करने में करता है कि कोड सही है, और प्रत्येक फ़ंक्शन साइड इफेक्ट्स से मुक्त है।
फिर भी, मेरे दृष्टिकोण से यह सब वाक्यविन्यास वास्तव में व्यावसायिक तर्क के रास्ते में है। उदाहरण के लिए, "MyBusinessObject" का एक प्रकार ठीक है, साथ ही "सूची [MyBusinessObject]", "विकल्प [MyBusinessObject]" या यहां तक कि "भविष्य [MyBusinessObject" जैसे प्रकार भी हैं। इन सबका स्पष्ट अर्थ और उद्देश्य है। दूसरी ओर, जैसे कोड:
def method[M[_]: Applicative] = {
case (a, b) => (ca[M](a) |@| cb[M](b)) {
case t @ (ra, rb) =>
if (ra.result && rb.result) t.right
else t.left
}
}
क्या यह कार्यक्रम में जटिलता जोड़ता है, या क्या यह सिर्फ मेरे लिए है कि मैं प्रोग्रामिंग के इस तरीके से अभ्यस्त नहीं हूं?
>>=
और <$>
जब तक आप कुछ भी नहीं करते हैं। जानते हैं कि वे क्या करते हैं। सीखने के बाद उनका क्या मतलब है, हालांकि, वे अब मेरे लिए बहुत स्वाभाविक रूप से और जल्दी से पढ़ते हैं। वास्तव में जवाब नहीं, बस इस तरह की चीजों के साथ मेरा उद्देश्य अनुभव। मैं स्काला का भी उपयोग करता हूं, लेकिन मुझे स्कैलाज़ लाइब्रेरी का कोई अनुभव नहीं है।
for(i=0; i<7; ++i) { trivialOperation(i); }
कुछ अजीब trivialOperationCount
चर के साथ नहीं लिखेंगे ? OO में बस एक्सेसर मेथड कॉल्स लिखें। परिणाम आम तौर पर अधिक संक्षिप्त है; शायद थोड़ा कम आत्म-व्याख्यात्मक, लेकिन डेटा घोषणा को सामान्य रूप से देखने से यह जल्दी से स्पष्ट हो जाता है। स्टेटिक टाइपिंग बहुत मदद करता है, यह एपीएल में पसंद नहीं है।