fp-ts for TypeScript: फंक्शनल प्रोग्रामिंग की पूरी गाइड
1. यह क्या है और क्यों ज़रूरी है?
fp-ts (Functional Programming in TypeScript) एक शक्तिशाली ओपन-सोर्स लाइब्रेरी है जो TypeScript में फंक्शनल प्रोग्रामिंग (FP) की पैराडाइम लाती है। यह Haskell, PureScript और Scala जैसी भाषाओं से प्रेरित टाइप्स, फंक्शन्स और कॉम्बिनेटर्स का सेट प्रदान करती है। इम्पेरेटिव या ऑब्जेक्ट-ओरिएंटेड अप्रोच के विपरीत, fp-ts आपको स्वच्छ, अनुमानित और आसानी से टेस्ट करने योग्य कोड लिखने में मदद करती है। यह लाइब्रेरी फंक्टर, मोनाड, एप्लिकेटिव फंक्टर और अन्य एब्स्ट्रैक्शन पर आधारित है जो साइड इफेक्ट्स को मैनेज करने, एरर हैंडल करने और बिना एक्सेप्शन या स्टेट म्यूटेशन के एसिंक्रोनस कोड लिखने में सहायक होती है।
fp-ts क्यों इस्तेमाल करें? आधुनिक TypeScript डेवलपमेंट में अक्सर समस्याएँ आती हैं: अचानक एक्सेप्शन (जैसे null या undefined के साथ काम करते समय), छिपी डिपेंडेंसी और साइड इफेक्ट्स के कारण टेस्टिंग में कठिनाई, और कॉलबैक वाला उलझा हुआ एसिंक्रोनस कोड। fp-ts इन समस्याओं को सख्त टाइप सिस्टम और कम्पोज़ेबल एब्स्ट्रैक्शन के साथ हल करती है। उदाहरण के लिए, Option टाइप वैल्यू की अनुपस्थिति को स्पष्ट रूप से मॉडल करता है, और Either try/catch के बिना एरर हैंडलिंग करता है। इससे कोड टाइप लेवल पर अधिक सुरक्षित और डॉक्यूमेंटेड हो जाता है।
यह लाइब्रेरी विशेष रूप से उन प्रोजेक्ट्स में उपयोगी है जहाँ बिज़नेस लॉजिक जटिल हो और विश्वसनीयता व मेंटेनबिलिटी महत्वपूर्ण हो। यह उन टीमों के लिए भी बढ़िया है जो धीरे-धीरे फंक्शनल प्रिंसिपल्स अपनाना चाहते हैं, बिना पूरे प्रोजेक्ट को फिर से लिखे। fp-ts को कम्युनिटी सक्रिय रूप से सपोर्ट करती है और इसकी समृद्ध इकोसिस्टम है, जिसमें io-ts (डेटा वैलिडेशन), monocle-ts (लेंस) और hyper-ts (वेब सर्वर) शामिल हैं।
2. इंस्टॉलेशन
fp-ts npm के माध्यम से उपलब्ध है। इसे इंस्टॉल करने के लिए यह कमांड चलाएँ:
npm install fp-ts
यदि आप ब्राउज़र के बजाय Node.js में काम कर रहे हैं, तो Node.js टाइप्स के लिए @types/node इंस्टॉल करने की भी सलाह दी जाती है:
npm install -D @types/node
fp-ts के साथ काम करने के लिए TypeScript संस्करण 4.0 या उससे ऊपर की आवश्यकता है। सुनिश्चित करें कि आपके tsconfig.json में अधिकतम टाइप सुरक्षा के लिए "strict": true विकल्प सक्षम हो।
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
आइए एक सरल उदाहरण देखें: शून्य से भाग को हैंडल करते हुए दो संख्याओं का सुरक्षित विभाजन। fp-ts के बिना हम ऐसे लिखते:
function divide(a: number, b: number): number | null {
if (b === 0) return null;
return a / b;
}
const result = divide(10, 2);
if (result !== null) {
console.log(result); // 5
}
fp-ts के साथ हम Option टाइप का उपयोग करते हैं:
import { pipe } from 'fp-ts/function';
import { Option, some, none, fromPredicate } from 'fp-ts/Option';
const safeDivide = (a: number, b: number): Option =>
pipe(
b,
fromPredicate((x) => x !== 0),
Option.map((divisor) => a / divisor)
);
const result = safeDivide(10, 2);
// result: Option — some(5) या none
// वैल्यू निकालना
import { fold } from 'fp-ts/Option';
const message = pipe(
result,
fold(
() => 'त्रुटि: शून्य से भाग',
(value) => `परिणाम: ${value}`
)
);
console.log(message); // "परिणाम: 5"
यह उदाहरण fp-ts के मुख्य सिद्धांतों को दर्शाता है: pipe के माध्यम से कम्पोज़िशन, वैल्यू की अनुपस्थिति का स्पष्ट मॉडलिंग, और बिना एक्सेप्शन के एरर हैंडलिंग।
4. मुख्य तरीके/फंक्शन्स/क्लासेस
4.1. Option — वैकल्पिक वैल्यू के साथ काम
सिग्नेचर:
// कंस्ट्रक्टर
declare const some: (a: A) => Option;
declare const none: Option;
// मुख्य तरीके
declare const map: (f: (a: A) => B) => (fa: Option