يوفر Effect-TS طرقًا مختلفة لتصفية القيم داخل الخيار، مما يسمح لك بتطبيق التحويلات أو المسندات أو عمليات التحقق من القيمة الاختيارية. تساعد هذه الوظائف على ضمان الاحتفاظ بالبيانات ذات الصلة فقط أثناء تجاهل القيم "لا شيء" أو تلك التي لا تستوفي الشروط المحددة. في هذه المقالة، سنستكشف أربع وظائف رئيسية لخيارات التصفية: O.partitionMap، وO.filterMap، وO.filter، وO.exists.
تتيح لك وظيفة O.partitionMap تقسيم الخيار إلى مجموعة مكونة من خيارين بناءً على وظيفة التعيين التي تُرجع أي منهما. يتم تقسيم قيم إما.left إلى الخيار الأول، بينما تنتقل قيم إما.يمين إلى الخيار الثاني. إذا كان الخيار الأصلي هو لا شيء، فإن كلا القسمين لا يوجد.
function filtering_ex01() { const some = O.some(1); // Create an Option containing the value 1 const none = O.none(); // Create an Option representing no value const toEither = (n: number) => (n % 2 === 0 ? E.left(n) : E.right(n)); console.log(pipe(some, O.partitionMap(toEither))); // Output: [None, Some(1)] (1 is odd, so it goes to the right) console.log(pipe(none, O.partitionMap(toEither))); // Output: [None, None] (since the Option is None) }
تعتبر هذه الوظيفة مفيدة عندما تحتاج إلى تطبيق تعيين يصنف القيم، مع فصلها إلى مجموعتين - تلك التي تستوفي شرطًا وتلك التي لا تستوفيه.
تطبق وظيفة O.filterMap وظيفة تحويل على القيمة الموجودة داخل الخيار. إذا قامت الدالة بإرجاع بعض، فسيتم الاحتفاظ بالقيمة؛ إذا قامت بإرجاع لا شيء، فسيتم تصفية القيمة. إذا كان الخيار الأصلي هو لا شيء، تبقى النتيجة لا شيء.
function filtering_ex02() { const some = O.some(1); // Create an Option containing the value 1 const none = O.none(); // Create an Option representing no value const toEven = (n: number) => (n % 2 === 0 ? O.some(n) : O.none()); console.log(pipe(some, O.filterMap(toEven))); // Output: None (since 1 is not even) console.log(pipe(O.some(2), O.filterMap(toEven))); // Output: Some(2) (since 2 is even) console.log(pipe(none, O.filterMap(toEven))); // Output: None (since the original Option is None) }
هذه الوظيفة مفيدة عندما تريد تحويل وتصفية القيمة داخل خيار بناءً على شروط محددة.
تتحقق وظيفة O.filter مما إذا كانت القيمة الموجودة داخل الخيار تفي بمسند معين. إذا تم استيفاء المسند، فإنه يقوم بإرجاع الخيار الأصلي؛ وإلا فإنها ترجع بلا. إذا كان الخيار الأصلي هو لا شيء، فإنه يبقى لا شيء.
function filtering_ex03() { const some = O.some(1); // Create an Option containing the value 1 const none = O.none(); // Create an Option representing no value const isEven = (n: number) => n % 2 === 0; console.log(pipe(some, O.filter(isEven))); // Output: None (since 1 is not even) console.log(pipe(O.some(2), O.filter(isEven))); // Output: Some(2) (since 2 is even) console.log(pipe(none, O.filter(isEven))); // Output: None (since the original Option is None) }
تتحقق الدالة O.exists مما إذا كانت القيمة الموجودة داخل الخيار تفي بالمسند، وترجع صحيحًا إذا كانت كذلك، وخطأ إذا لم تكن كذلك. إذا كان الخيار بلا، فإنه يُرجع خطأ.
function filtering_ex04() { const some = O.some(1); // Create an Option containing the value 1 const none = O.none(); // Create an Option representing no value const isEven = (n: number) => n % 2 === 0; console.log(pipe(some, O.exists(isEven))); // Output: false (since 1 is not even) console.log(pipe(O.some(2), O.exists(isEven))); // Output: true (since 2 is even) console.log(pipe(none, O.exists(isEven))); // Output: false (since the original Option is None) }
هذه الوظيفة مفيدة عندما تحتاج إلى فحص سريع لتحديد ما إذا كانت القيمة الموجودة داخل الخيار تفي بشرط ما دون تحويل الخيار نفسه أو تصفيته.
تتيح خيارات التصفية في Effect-TS التعامل المرن مع القيم الاختيارية بناءً على الشروط أو التحويلات. سواء كنت تقوم بتقسيم القيم باستخدام O.partitionMap، أو تطبيق التحويلات باستخدام O.filterMap، أو التحقق من المسندات باستخدام O.filter، أو ببساطة التحقق من الشروط باستخدام O.exists، فإن هذه الأدوات توفر طرقًا قوية للتحكم في كيفية التعامل مع الخيارات. باستخدام هذه الوظائف، يمكنك إدارة البيانات الاختيارية بكفاءة، مما يضمن الاحتفاظ بالقيم ذات الصلة فقط أو التصرف بناءً عليها.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3