Window.pipedriveLeadboosterConfig = { القاعدة: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', الإصدار: 2, } ؛(الدالة () { var w = نافذة إذا كان (w.LeadBooster) { console.warn('LeadBooster موجود بالفعل') } وإلا { { w.LeadBooster = { q: [], على: دالة (ن، ح) { { هذا.q.push({ t: 'o'، n: n، n: n، h: h }) }, الزناد: الدالة (n) { هذا.q.push({ t: 't'، n: n: n }) }, } } })() البرمجة الوظيفية في JavaScript الجزء 3 - المتحول والموناد ربما - The Codest
The Codest
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • الصناعات
    • التكنولوجيا المالية والمصرفية
    • E-commerce
    • أدتك
    • التكنولوجيا الصحية
    • التصنيع
    • الخدمات اللوجستية
    • السيارات
    • إنترنت الأشياء
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
السهم الخلفي العودة إلى الوراء
2022-06-21
تطوير البرمجيات

البرمجة الوظيفية في JavaScript الجزء 3 - المتحول والموناد ربما

The Codest

بافيل جيد

Vue.js مطور Vue.js

راجع الجزء الثالث من سلسلة مقالات قوة البرمجة الوظيفية في JavaScript. هذه المرة يشرح خبيرنا JavaScript المزيد عن Functor و Monad ربما.

مقدمة

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

إذا كنت جديدًا هنا فتأكد من مراجعة آخر جزأين لي بخصوص البرمجة الوظيفية على مدونة The Codest حول:

  • الجزء 1 - مقدمة
  • الجزء 2 - المجمّعات

فونكتور

ليس لها منطق معقد. مهمتها الرئيسية هي تغليف السياق وتنفيذ الدوال التي تتلقاها من الخارج عليها. في كل مرة تتغير فيها القيمة، يُعاد تجميع مثيل حاوية جديدة وإرجاعها. عند استدعاء الخريطة الذي يأخذ إجراءً محددًا، فإنه يُرجع مثيل حاوية جديد بالقيمة التي تُرجعها الدالة التي تم تمريرها، مع الحفاظ على مبدأ عدم قابلية التعديل.

إعلان

const functor = القيمة => ({
     خريطة: fn => Functor(fn(value)),
     السلسلة: fn => fn(value),
     من: () => القيمة
 });

الخريطة - مفيدة عندما تريد تغيير حالة قيمة في حاوية ولكنك لا تريد إرجاعها بعد.

السلسلة - تُستخدم إذا أردت تمرير قيمة إلى دالة دون تعديل حالة الحاوية. عادةً في نهاية الخريطة المكالمات.

من - إرجاع القيمة الحالية

مثال حتمي

const randomInt = (حد أقصى) => Math.floor(Math.random() * (حد أقصى + 1))

const randomNumber = randomInt(200) // إرجاع رقم بين 0 و200

تصغير(randomNumber) // يُرجع (الرقم بين 0 و200) - 1

مثال توضيحي

const randomIntWrapper = (حد أقصى) =>
فونكتور(ماكس)
.خريطة(زيادة) // ماكس + 1
.خريطة(multiplyBy(Math.random())) // ماث.عشوائي() * (ماكس + 1)
.map(Math.floor) // Math.floor(Math.random()) * (ماكس + 1))

const randomNumber عشوائي = randomIntWrapper(200)

randomNumber.of() // إرجاع رقم بين 0 و200
randomNumber.chain(تناقص) // إرجاع (رقم بين 0 و200) - 1

موناد

في بعض الأحيان، بالإضافة إلى الدوال التي تؤدي إلى الحالة الجديدة للقيمة، تحتاج إلى منطق إضافي مخفي في الحاوية. هذا هو المكان الذي يكون فيه الموناد مفيدًا، حيث أنه امتداد لـ ناقل. يمكنه، على سبيل المثال، تحديد ما يجب أن يحدث عندما يكون للقيمة قيمة معينة أو ما هو المسار الذي يجب أن تتخذه الإجراءات التالية.

موناد ربما

ربما يحل الموناد مشكلة القيم التي لا تعود صحيحة. عندما يحدث هذا الأمر، فإن الخريطة يتم تجاهل المكالمات، ولكن يسمح لك بإرجاع بديل عن طريق استدعاء getOr طريقة. تسمح لك بتجنب استخدام مشغلي If / else، والتي تعتبر شائعة في حتمية البرمجة. يتكون هذا الموناد من ثلاث حاويات:

لا شيء - يعمل عندما تقع قيمة غير صحيحة في الحاوية أو الفلتر خطأ. يُستخدم لمحاكاة تنفيذ الدالة. هذا يعني أن هذه الحاوية تستقبل الدالة ولكنها لا تنفذها.

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

ربما - آخذ القيمة الأولية وأقرر ما هي الحاوية التي سأستدعيها في البداية.

إعلان

const Just = القيمة => ({
خريطة: fn => ربما(fn(value)),
السلسلة: fn => fn(value),
من: () => القيمة,
getOr: () => القيمة,
التصفية: fn => fn(value) ? فقط (القيمة) : لا شيء(),
النوع: 'فقط'
});

كونت لا شيء = () => ({
خريطة: fn => لا شيء(),
السلسلة: fn => fn()، (، (fn()),
من: () => لا شيء(),
getOr: بديل => بديل,
مرشح: () => لا شيء(),
النوع: 'لا شيء'
});

const Maybe = القيمة =>
القيمة = === لا شيء ||القيمة === غير معرف ||||القيمة.type === 'لا شيء'
? لا شيء()
: فقط(القيمة)
ناقل طرق الجدول

الآن دعونا نبني المثال السابق حول الشرط. إذا كان الحد الأقصى أكبر من الصفر، سيتم تنفيذ الدالة. خلاف ذلك، ستُعيد 0.

مثال حتمي

const randomInt = (الحد الأقصى) => {
إذا (ماكس > 0) {
يُرجع Math.floor(Math.random() * (max + 1))
آخر } { {
إرجاع 0
}
}

const bookMiddlePage = 200

const randomPage = randomInt(-10) | | bookMiddlePage // إرجاع عشوائي
const randomPage = randomInt(-10) | | bookMiddlePage // يُرجع 200

مثال توضيحي

const randomIntWrapper = (حد أقصى) =>
ربما(ماكس)
.فلتر(ماكس => ماكس > 0) // القيمة خطأ تتجاهل المزيد من المكالمات
.خريطة(زيادة)
.map(multiplyBy(Math.random()))
.خريطة(Math.floor)

const bookMiddlePage = 200

// حاوية فقط
const randomPage = randomIntWrapper(10).getOr(bookMiddlePage) // يُرجع عشوائيًا
// حاوية لا شيء
const randomPage = randomIntWrapper(-10).getOr(bookMiddlePage) // يُرجع 200


راية التعاون

مقالات ذات صلة

تطوير البرمجيات

غير متزامن وأحادي الخيوط JavaScript؟

JavaScript هي لغة أحادية الخيط، وفي الوقت نفسه، هي أيضًا لغة غير متوقفة وغير متزامنة ومتزامنة. ستشرح لك هذه المقالة كيف يحدث ذلك.

لوكاش كولكو
E-commerce

معضلات الأمن السيبراني: تسريبات البيانات

الذروة التي تسبق عيد الميلاد على قدم وساق. بحثًا عن هدايا لأحبائهم، يتزايد إقبال الناس على "اقتحام" المتاجر الإلكترونية

The Codest
ياكوب جاكوب جاكوبوفيتش CTO وشريك مؤسس CTO

اشترك في قاعدة معارفنا وابقَ على اطلاع على آخر المستجدات في قطاع تكنولوجيا المعلومات.

    نبذة عنا

    The Codest - شركة دولية لتطوير البرمجيات لها مراكز تقنية في بولندا.

    المملكة المتحدة - المقر الرئيسي

    • المكتب 303 ب، 182-184 شارع هاي ستريت نورث E6 2JA
      لندن، إنجلترا

    بولندا - مراكز التكنولوجيا المحلية

    • مجمع مكاتب فابريتشنا المكتبي، أليجا
      بوكوجو 18، 31-564 كراكوف
    • سفارة الأدمغة، كونستروكتورسكا
      11, 02-673 02-673 وارسو، بولندا

      The Codest

    • الصفحة الرئيسية
    • نبذة عنا
    • الخدمات
    • دراسات الحالة
    • اعرف كيف
    • الوظائف
    • القاموس

      الخدمات

    • استشاري
    • تطوير البرمجيات
    • تطوير الواجهة الخلفية
    • تطوير الواجهة الأمامية
    • Staff Augmentation
    • مطورو الواجهة الخلفية
    • مهندسو السحابة
    • مهندسو البيانات
    • أخرى
    • مهندسو ضمان الجودة

      الموارد

    • حقائق وأساطير حول التعاون مع شريك خارجي لتطوير البرمجيات
    • من الولايات المتحدة الأمريكية إلى أوروبا: لماذا تقرر الشركات الأمريكية الناشئة الانتقال إلى أوروبا؟
    • مقارنة مراكز تطوير التكنولوجيا في الخارج: تك أوفشور أوروبا (بولندا)، آسيان (الفلبين)، أوراسيا (تركيا)
    • ما هي أهم التحديات التي تواجه CTOs ومديري تكنولوجيا المعلومات؟
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • شروط استخدام الموقع الإلكتروني

    جميع الحقوق محفوظة © 2025 بواسطة The Codest. جميع الحقوق محفوظة.

    arArabic
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek arArabic