يوفر Effect-TS أدوات قوية للتعامل مع الخيار وأي من النوعين. في هذه المقالة، سوف نستكشف طرقًا مختلفة لتحويل هذه الأنواع ومعالجتها باستخدام وظائف المكتبة المساعدة.
تقوم الدالة 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 }
تقوم الدالة 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') }
ترجع الدالة 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) }
تقوم الدالة 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) }
ترجع الدالة 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) }
ترجع الدالة 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) }
تقوم الدالة 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) }
تقوم الدالة 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) }
تقوم الدالة 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 يوفر مجموعة قوية من الأدوات لتبسيط هذه المهام. من خلال الاستفادة من هذه الأدوات المساعدة، يمكنك كتابة تعليمات برمجية أكثر وضوحًا وأكثر قابلية للصيانة والتي تتعامل بشكل فعال مع وجود القيم أو عدم وجودها.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3