TypeScript: कार्यात्मक या OOP — 2024 में क्या चुनें?

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

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

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

एक ही सिक्के के दो पहलू: TypeScript में कार्यात्मक और OOP दृष्टिकोण

\n\n

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

\n\n

इस लेख में हम यह बहस नहीं करेंगे कि क्या बेहतर है। हम वास्तविक उदाहरणों पर TypeScript में कार्यात्मक प्रोग्रामिंग बनाम ऑब्जेक्ट-ओरिएंटेड का विश्लेषण करेंगे। आप जानेंगे कि कब क्लासेस का उपयोग करना चाहिए और कब हायर-ऑर्डर फंक्शन्स का, और आधुनिक विकास में सुनहरा मध्य मार्ग कैसे खोजें।

\n\n

TypeScript में कार्यात्मक प्रोग्रामिंग क्या है?

\n\n

कार्यात्मक प्रोग्रामिंग (FP) एक प्रतिमान है जहाँ मुख्य निर्माण खंड शुद्ध फंक्शन्स हैं। वे बाहरी स्थिति को नहीं बदलते हैं और समान इनपुट डेटा के लिए हमेशा एक ही परिणाम लौटाते हैं। TypeScript सख्त टाइपिंग और फंक्शन्स को डेटा के रूप में काम करने की क्षमताओं के कारण FP का उत्कृष्ट समर्थन करता है।

\n\n

TypeScript में FP के मूल सिद्धांत

\n
    \n
  • इम्यूटेबिलिटी — डेटा बदला नहीं जाता, बल्कि नया बनाया जाता है
  • \n
  • शुद्ध फंक्शन्स — कोई साइड इफेक्ट नहीं
  • \n
  • कम्पोज़ीशन — सरल फंक्शन्स से जटिल व्यवहार बनाना
  • \n
  • हायर-ऑर्डर फंक्शन्स — ऐसे फंक्शन जो अन्य फंक्शन्स को स्वीकार या लौटाते हैं
  • \n
\n\n
// TypeScript में शुद्ध फंक्शन्स और इम्यूटेबिलिटी का उदाहरण\ntype User = {\n  readonly id: number;\n  readonly name: string;\n  readonly age: number;\n};\n\nconst addYear = (user: User): User => ({\n  ...user,\n  age: user.age + 1\n});\n\nconst users: User[] = [\n  { id: 1, name: 'Alice', age: 25 },\n  { id: 2, name: 'Bob', age: 30 }\n];\n\n// कोई म्यूटेशन नहीं — नया ऐरे बनाएँ\nconst updatedUsers = users.map(addYear);\nconsole.log(users[0].age); // 25 (मूल नहीं बदला)\nconsole.log(updatedUsers[0].age); // 26\n
\n\n

readonly पर ध्यान दें — यह TypeScript का एक शक्तिशाली उपकरण है जो टाइप स्तर पर इम्यूटेबिलिटी बनाए रखने में मदद करता है।

\n\n

TypeScript में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग क्या है?

\n\n

OOP ऑब्जेक्ट्स के आसपास बनाया गया है, जो डेटा और व्यवहार को एक साथ जोड़ते हैं। TypeScript JavaScript में क्लासिकल इनहेरिटेंस, एक्सेस मॉडिफायर्स और इंटरफेसेस जोड़ता है, जिससे OOP और भी अधिक अभिव्यंजक बन जाता है।

\n\n

TypeScript में OOP के मूल सिद्धांत

\n
    \n
  • एनकैप्सुलेशन — private और protected के माध्यम से आंतरिक स्थिति को छिपाना
  • \n
  • इनहेरिटेंस — क्लासेस के पदानुक्रम बनाना
  • \n
  • पॉलीमॉर्फिज्म — विभिन्न कार्यान्वयनों के लिए एक समान इंटरफ़ेस
  • \n
  • एब्स्ट्रैक्शन — विशिष्ट क्लासेस के बजाय इंटरफेसेस के माध्यम से काम करना
  • \n
\n\n
// TypeScript में OOP दृष्टिकोण का उदाहरण\nabstract class Animal {\n  constructor(protected name: string) {}\n\n  abstract makeSound(): string;\n\n  public introduce(): string {\n    return `I am ${this.name}, and I say ${this.makeSound()}`;\n  }\n}\n\nclass Dog extends Animal {\n  constructor(name: string) {\n    super(name);\n  }\n\n  public makeSound(): string {\n    return 'Woof!';\n  }\n}\n\nclass Cat extends Animal {\n  constructor(name: string) {\n    super(name);\n  }\n\n  public makeSound(): string {\n    return 'Meow!';\n  }\n}\n\nconst animals: Animal[] = [new Dog('Rex'), new Cat('Whiskers')];\nanimals.forEach(a => console.log(a.introduce()));\n// I am Rex, and I say Woof!\n// I am Whiskers, and I say Meow!\n
\n\n

यहाँ abstract और protected TypeScript की विशेषताएँ हैं, जो सामान्य JavaScript में नहीं हैं। वे टाइप स्तर पर ही सख्त आर्किटेक्चर बनाने की अनुमति देते हैं।

\n\n

दृष्टिकोणों की तुलना: कब क्या उपयोग करें?

\n\n

आइए कुछ

ब्लॉग

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