"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > خيارات التصفية في Effect-TS: دليل عملي

خيارات التصفية في Effect-TS: دليل عملي

تم النشر بتاريخ 2024-11-06
تصفح:530

Filtering Options in Effect-TS: A Practical Guide

يوفر Effect-TS طرقًا مختلفة لتصفية القيم داخل الخيار، مما يسمح لك بتطبيق التحويلات أو المسندات أو عمليات التحقق من القيمة الاختيارية. تساعد هذه الوظائف على ضمان الاحتفاظ بالبيانات ذات الصلة فقط أثناء تجاهل القيم "لا شيء" أو تلك التي لا تستوفي الشروط المحددة. في هذه المقالة، سنستكشف أربع وظائف رئيسية لخيارات التصفية: O.partitionMap، وO.filterMap، وO.filter، وO.exists.

مثال 1: تقسيم خيار باستخدام O.partitionMap

مفهوم

تتيح لك وظيفة 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)
}

توضيح

  • pipe(some, O.partitionMap(toEither)): نظرًا لأن الرقم 1 فردي، فإن الدالة toEither ترجع E.right(1)، وتضع 1 في الخيار الثاني، مما يؤدي إلى [None, Some(1) ].
  • pipe(none, O.partitionMap(toEither)): بما أن الخيار الأصلي هو لا شيء، فإن كلا القسمين لا شيء، مما يؤدي إلى [لا شيء، لا شيء].

تعتبر هذه الوظيفة مفيدة عندما تحتاج إلى تطبيق تعيين يصنف القيم، مع فصلها إلى مجموعتين - تلك التي تستوفي شرطًا وتلك التي لا تستوفيه.

المثال 2: رسم الخرائط والتصفية باستخدام O.filterMap

مفهوم

تطبق وظيفة 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)
}

توضيح

  • pipe(some, O.filterMap(toEven)): نظرًا لأن 1 ليس عددًا زوجيًا، فإن الدالة toEven ترجع لا شيء، والنتيجة هي لا شيء.
  • pipe(O.some(2), O.filterMap(toEven)): القيمة 2 زوجية، وبالتالي فإن الدالة toEven ترجع Some(2)، والنتيجة هي Some(2).
  • ]
  • pipe(none, O.filterMap(toEven)): بما أن الخيار الأصلي هو لا شيء، تبقى النتيجة لا شيء.

هذه الوظيفة مفيدة عندما تريد تحويل وتصفية القيمة داخل خيار بناءً على شروط محددة.

المثال 3: تصفية خيار بمسند باستخدام O.filter

مفهوم

تتحقق وظيفة 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)
}

مثال 4: التحقق من المسند بوجود O.exists

مفهوم

تتحقق الدالة 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)
}

توضيح

  • pipe(some, O.exists(isEven)): نظرًا لأن 1 ليس زوجيًا، فإن المسند غير راضٍ، وبالتالي فإن النتيجة خاطئة.
  • pipe(O.some(2), O.exists(isEven)): القيمة 2 تلبي المسند، لذا فإن النتيجة صحيحة.
  • pipe(none, O.exists(isEven)): بما أن الخيار بلا، فإن النتيجة خاطئة.

هذه الوظيفة مفيدة عندما تحتاج إلى فحص سريع لتحديد ما إذا كانت القيمة الموجودة داخل الخيار تفي بشرط ما دون تحويل الخيار نفسه أو تصفيته.

خاتمة

تتيح خيارات التصفية في Effect-TS التعامل المرن مع القيم الاختيارية بناءً على الشروط أو التحويلات. سواء كنت تقوم بتقسيم القيم باستخدام O.partitionMap، أو تطبيق التحويلات باستخدام O.filterMap، أو التحقق من المسندات باستخدام O.filter، أو ببساطة التحقق من الشروط باستخدام O.exists، فإن هذه الأدوات توفر طرقًا قوية للتحكم في كيفية التعامل مع الخيارات. باستخدام هذه الوظائف، يمكنك إدارة البيانات الاختيارية بكفاءة، مما يضمن الاحتفاظ بالقيم ذات الصلة فقط أو التصرف بناءً عليها.

بيان الافراج تم استنساخ هذه المقالة في: https://dev.to/almaclaine/filtering-in-effect-ts-a-practical-guide-96l؟
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3