Kotlin: कार्यात्मक या OOP? सही दृष्टिकोण चुनना

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin: एक भाषा में दो दुनियाएँ

\n\n

क्या आपने कभी सोचा है कि कुछ डेवलपर्स Kotlin को बेहतर Java की तरह क्यों लिखते हैं, जबकि अन्य कोड को लैम्ब्डा और कॉल चेन के झरने में बदल देते हैं? उत्तर सरल है: Kotlin एक बहु-प्रतिमान भाषा है जो ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) और कार्यात्मक प्रोग्रामिंग (FP) दोनों के साथ समान रूप से अच्छी तरह से काम करती है।

\n\n

लेकिन एक शुरुआत करने वाला इस विविधता में कैसे खो न जाए? और एक अनुभवी डेवलपर शैलियों के मिश्रण के कारण 'स्पेगेटी कोड' में कैसे न फंसे? इस लेख में, हम यह समझेंगे कि ये दृष्टिकोण कैसे भिन्न हैं, कहाँ और किसका उपयोग करना है, और Kotlin उनके सर्वोत्तम पहलुओं को संयोजित करने में कैसे मदद करता है। तैयार हो जाइए: बहुत सारा कोड होगा और कोई बोरियत नहीं।

\n\n

यदि आप Android डेवलपमेंट या बैकएंड के लिए Kotlin सीख रहे हैं, तो इन प्रतिमानों को समझना स्वच्छ, पठनीय और रखरखाव योग्य कोड की दुनिया का आपका टिकट है। चलिए शुरू करते हैं!

\n\n

ऑब्जेक्ट-ओरिएंटेड Kotlin: आधुनिक आवरण में क्लासिक्स

\n\n

ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण संस्थाओं के बारे में है। आपके पास क्लास हैं, क्लास में गुण और विधियाँ हैं। प्रोग्राम जो कुछ भी करता है वह ऑब्जेक्ट का इंटरैक्शन है। Kotlin Java से सर्वश्रेष्ठ लेता है, लेकिन इसमें चीनी मिलाता है: data class, object, आलसी गुण और भी बहुत कुछ।

\n\n

क्लास और इनहेरिटेंस: उदाहरण

\n\n

कल्पना करें कि हम एक ऑनलाइन स्टोर के लिए सिस्टम लिख रहे हैं। OOP दृष्टिकोण इस तरह दिखेगा:

\n\n
// बेस क्लास\nopen class Product(val name: String, val price: Double) {\n    open fun getDescription(): String {\n        return "$name की कीमत $price रुपये है"\n    }\n}\n\n// इनहेरिटेंस\nclass DiscountedProduct(name: String, price: Double, val discount: Double) : Product(name, price) {\n    override fun getDescription(): String {\n        val finalPrice = price * (1 - discount / 100)\n        return "$name पर $discount% छूट के बाद कीमत ${"%.2f".format(finalPrice)} रुपये है"\n    }\n}\n\nfun main() {\n    val apple = Product("सेब", 50.0)\n    val saleApple = DiscountedProduct("सेब", 50.0, 20.0)\n    \n    println(apple.getDescription())  // सेब की कीमत 50.0 रुपये है\n    println(saleApple.getDescription()) // सेब पर 20% छूट के बाद कीमत 40.00 रुपये है\n}
\n\n

यहाँ सब कुछ तार्किक है: एक पदानुक्रम, बहुरूपता, एनकैप्सुलेशन है। लेकिन नुकसान भी हैं: यदि कई क्लास हैं तो कोड भारी हो जाता है। और अगर हमें किसी भी उत्पाद पर छूट लागू करनी है, तो हमें उप-क्लास बनाने होंगे।

\n\n

OOP कब हावी होता है?

\n
    \n
  • जटिल व्यावसायिक मॉडल — जब संस्थाओं में कई अवस्थाएँ और व्यवहार हों।
  • \n
  • UI घटक — Activity, Fragment, View — ये सब क्लासिक OOP हैं।
  • \n
  • डेटाबेस के साथ काम — ORM (जैसे, Room) क्लास पर आधारित रिफ्लेक्शन और एनोटेशन का उपयोग करता है।
  • \n
\n\n

कार्यात्मक Kotlin: संक्षिप्तता और सुरक्षा

\n\n

कार्यात्मक प्रोग्रामिंग अवस्थाओं के बजाय गणनाओं के बारे में है। ऑब्जेक्ट को बदलने के बजाय, हम अपरिवर्तनीय डेटा और शुद्ध फ़ंक्शन का उपयोग करते हैं। Kotlin आपको कार्यात्मक शैली में लिखने के लिए बाध्य नहीं करता, लेकिन इसके लिए सभी उपकरण प्रदान करता है: लैम्ब्डा, उच्च-क्रम फ़ंक्शन, मोनैड-जैसी संरचनाएँ (जैसे, Result)।

\n\n

उच्च-क्रम फ़ंक्शन: उदाहरण

\n\n

आइए छूट वाली उसी समस्या को कार्यात्मक रूप से हल करें:

\n\n
data class Product(val name: String, val price: Double)\n\nfun applyDiscount(discount: Double): (Product) -> Product = { product ->\n    val finalPrice = product.price * (1 - discount / 100)\n    product.copy(price = finalPrice)\n}\n\nfun main() {\n    val apple = Product("सेब", 50.0)\n    val saleApple = applyDiscount(20.0)(apple)\n    \n    println("${apple.name} की कीमत ${apple.price} रुपये है")           // सेब की कीमत 50.0 रुपये है\n    println("${saleApple.name} पर छूट के बाद कीमत ${saleApple.price} रुपये है") // सेब पर छूट के बाद कीमत 40.0 रुपये है\n}
\n\n

ध्यान दें: हम कोई नई क्लास नहीं बना रहे हैं। हम बस फ़ंक्शन के माध्यम से डेटा पास कर रहे हैं

ब्लॉग

पुस्तक अनुशंसाएँ