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

استكشاف تحويلات الخيارات في Effect-TS

تم النشر بتاريخ 2024-07-30
تصفح:190

Exploring Option Conversions in Effect-TS

يوفر Effect-TS أدوات قوية للتعامل مع الخيار وأي من النوعين. في هذه المقالة، سوف نستكشف طرقًا مختلفة لتحويل هذه الأنواع ومعالجتها باستخدام وظائف المكتبة المساعدة.

المثال 1: تحويل إما إلى خيار باستخدام O.getRight

تقوم الدالة O.getRight بتحويل إما إلى خيار، مع تجاهل الخطأ. إذا كان أي منهما صحيحًا، فإنه يُرجع O.some(value)، وإلا فإنه يُرجع O.none.

import { Option as O, Either as E, pipe } from 'effect';

function conversions_ex01() {
  const eitherRight = E.right('ok'); // Create an Either containing the value 'ok'
  const eitherLeft = E.left('error'); // Create an Either representing an error

  console.log(O.getRight(eitherRight)); // Output: Some('ok')
  console.log(O.getRight(eitherLeft)); // Output: None
}

المثال 2: تحويل إما إلى خيار باستخدام O.getLeft

تقوم الدالة O.getLeft بتحويل إما إلى خيار، مع تجاهل القيمة. إذا كان أي منهما على اليسار، فإنه يُرجع O.some(error)، وإلا فإنه يُرجع O.none.

import { Option as O, Either as E, pipe } from 'effect';

function conversions_ex02() {
  const eitherRight = E.right('ok'); // Create an Either containing the value 'ok'
  const eitherLeft = E.left('error'); // Create an Either representing an error

  console.log(O.getLeft(eitherRight)); // Output: None
  console.log(O.getLeft(eitherLeft)); // Output: Some('error')
}

المثال 3: الحصول على القيمة أو القيمة الافتراضية باستخدام O.getOrElse

ترجع الدالة O.getOrElse القيمة الموجودة داخل الخيار إذا كانت Some، وإلا فإنها ترجع القيمة الافتراضية المقدمة.

import { Option as O, pipe } from 'effect';

function conversions_ex03() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some,
      O.getOrElse(() => 'default')
    )
  ); // Output: 1 (since some contains 1)
  console.log(
    pipe(
      none,
      O.getOrElse(() => 'default')
    )
  ); // Output: 'default' (since none is None)
}

المثال 4: خيارات التسلسل باستخدام O.orElse

تقوم الدالة O.orElse بإرجاع الخيار المتوفر إذا كانت قيمة self هي بلا، وإلا فإنها ترجع ذاتيًا. تسمح هذه الوظيفة بتسلسل الخيارات حيث يكون الخيار الاحتياطي خيارًا آخر.

import { Option as O, pipe } from 'effect';

function conversions_ex04() {
  const some1 = O.some(1); // Create an Option containing the value 1
  const some2 = O.some(2); // Create an Option containing the value 2
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some1,
      O.orElse(() => some2)
    )
  ); // Output: Some(1) (since some1 contains 1)
  console.log(
    pipe(
      none,
      O.orElse(() => some2)
    )
  ); // Output: Some(2) (since none is None and fallback is some2)
}

المثال 5: الرجوع إلى القيمة الافتراضية باستخدام O.orElseSome

ترجع الدالة O.orElseSome القيمة الافتراضية المقدمة المغلفة في Some إذا كانت self هي بلا، وإلا فإنها ترجع self. تسمح هذه الوظيفة بتسلسل الخيارات حيث تكون القيمة الاحتياطية هي القيمة الافتراضية المضمنة في Some.

import { Option as O, pipe } from 'effect';

function conversions_ex05() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some,
      O.orElseSome(() => 2)
    )
  ); // Output: Some(1) (since some contains 1)
  console.log(
    pipe(
      none,
      O.orElseSome(() => 2)
    )
  ); // Output: Some(2) (since none is None and fallback is 2)
}

مثال 6: خيارات التسلسل مع أي من السياقين باستخدام O.orElseEither

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

import { Option as O, Either as E, pipe } from 'effect';

function conversions_ex06() {
  const some1 = O.some(1); // Create an Option containing the value 1
  const some2 = O.some(2); // Create an Option containing the value 2
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some1,
      O.orElseEither(() => some2)
    )
  ); // Output: Some(Right(1)) (since some1 contains 1)
  console.log(
    pipe(
      none,
      O.orElseEither(() => some2)
    )
  ); // Output: Some(Left(2)) (since none is None and fallback is some2)
}

المثال 7: ابحث عن الجزء الأول في كائن متكرر باستخدام O.firstSomeOf

تقوم الدالة O.firstSomeOf بإرجاع أول Some الموجود في مجموعة متكررة من الخيارات. إذا كانت جميعها لا شيء، فإنها تُرجع لا شيء.

import { Option as O } from 'effect';

function conversions_ex07() {
  const options = [O.none(), O.some(1), O.some(2)]; // Create an iterable of Options
  const optionsAllNone = [O.none(), O.none()]; // Create an iterable of None Options

  console.log(O.firstSomeOf(options)); // Output: Some(1) (since the first non-None Option is Some(1))
  console.log(O.firstSomeOf(optionsAllNone)); // Output: None (since all Options are None)
}

المثال 8: تحويل دالة ترجع خيارًا إلى نوع حماية باستخدام O.toRefinement

تقوم الدالة O.toRefinement بتحويل دالة ترجع خيارًا إلى نوع حماية، مما يسمح بفحص نوع أكثر تحديدًا.

import { Option as O } from 'effect';

function conversions_ex08() {
  const isPositive = (n: number): O.Option => n > 0 ? O.some(n) : O.none();
  const isPositiveRefinement = O.toRefinement(isPositive);

  console.log(isPositiveRefinement(1)); // Output: true (since 1 is positive)
  console.log(isPositiveRefinement(-1)); // Output: false (since -1 is not positive)
}

المثال 9: تحويل خيار إلى مصفوفة باستخدام O.toArray

تقوم الدالة O.toArray بتحويل خيار إلى صفيف. إذا كان الخيار Some، فإنه يُرجع مصفوفة تحتوي على القيمة؛ إذا كان لا شيء، فإنه يقوم بإرجاع مجموعة فارغة.

import { Option as O } from 'effect';

function conversions_ex09() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value

  console.log(O.toArray(some)); // Output: [1] (since some contains 1)
  console.log(O.toArray(none)); // Output: [] (since none is None)
}

خاتمة

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

بيان الافراج تم نشر هذه المقالة على: https://dev.to/almaclaine/exploring-option-conversions-in-effect-ts-3bpk?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3