Parameters

  • تمرير المعلمات إلى المحددات في Redux Reselect

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

    في البداية، قم بتعديل المحددات لتأخذ المعلمات الإضافية التي تحتاجها. لنفترض أنك تحتاج إلى تمرير قيمة مخصصة (myValue) إلى selectAllDataFiltered. يمكنك تعديل المحدد كما يلي:

    javascript
    export const selectAllDataFiltered = createSelector( [ selectAllData, filterText ], (data, text) => { return data.filter(item => { return item.name === text; }); } );

    قم بتحديثه ليأخذ قيمة إضافية:

    javascript
    export const selectAllDataFiltered = createSelector( [selectAllData, filterText, (_, myValue) => myValue], // هنا يتم تمرير القيمة المخصصة (data, text, myValue) => { console.log(myValue); return data.filter(item => { return item.name === text; }); } );

    الآن، يمكنك تمرير القيمة المخصصة (myValue) عند استدعاء المحدد من أي مكان في التطبيق. ومن المهم أن تضمن أنك تمرر القيمة المخصصة كمعامل إضافي إلى المحدد عند استدعائه. على سبيل المثال:

    javascript
    let data = selectAllDataFiltered(state, null, 'myValue'); // يتم تمرير القيمة المخصصة هنا

    باستخدام هذا التغيير، يجب أن يتمكن المحدد selectAllDataFiltered الآن من استقبال القيمة المخصصة بشكل صحيح واستخدامها في عملياته.

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

    المزيد من المعلومات

    بعدما قمت بتعديل المحددات لتقبل المعلمات الإضافية، يمكنك الآن الاستفادة من قدراتها الكاملة في تنقية وتجميع البيانات بناءً على القيم التي تمررها.

    باستخدام المحدد المعدّل selectAllDataFiltered، يمكنك الآن تمرير القيمة المخصصة myValue واستخدامها في فلترة البيانات بالشكل الذي تريده. فعلى سبيل المثال، إذا كنت ترغب في تصفية البيانات بناءً على قيمة معينة في الحقل name، يمكنك تمرير هذه القيمة كمعلمة إلى المحدد، ثم استخدامها في عملية الفلترة.

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

    من الجدير بالذكر أن استخدام المحددات بشكل فعال يمكن أن يحسن من أداء تطبيقك، حيث يمكن أن تقلل من عدد العمليات اللازمة لاسترجاع البيانات وتحسين استجابة التطبيق بشكل عام.

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

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

  • استخدام المتغيرات في جافا سكريبت

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

    لنبدأ بفهم الأمر: في الوقت الحالي، المتغيرات x و z داخل الدوال foo و bar هي محلية لتلك الدوال. وهذا يعني أنها غير مرئية خارج نطاق تلك الدوال. إذا حاولت الوصول إليهما خارج نطاق تلك الدوال، ستحصل على خطأ.

    الطريقة الأولى التي ذكرتها لحل هذه المشكلة هي نقل المتغيرات إلى النطاق العالمي (global scope). ولكن هذا الحل قد يكون غير مثالي، لأنه يمكن أن يؤدي إلى تلويث النطاق العالمي وإلى تداخل المتغيرات مع بعضها البعض في تطبيقات كبيرة.

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

    لتصحيح هذا، يجب عليك تعديل الدالة compare لتأخذ المتغيرات التي تحتاجها كمعلمات. هناك طريقتين للقيام بذلك، إما عن طريق تمرير قيم المتغيرات مباشرة كمعلمات، أو عن طريق تحديد الوظائف foo و bar لتعيين قيم المتغيرات إلى خصائص في كائن واحد، ثم تمرير هذا الكائن كمعلمة إلى الدالة compare.

    هذا مثال على كيفية تنفيذ الحل الثاني:

    javascript
    function foo(){ return { x: 2 }; } function bar(){ return { z: 2 }; } function compare(fooResult, barResult){ if (fooResult.x === barResult.z) { console.log("text"); } } // استدعاء الدوال وتمرير نتائجها كمعلمات إلى الدالة compare compare(foo(), bar());

    في هذا المثال، تقوم الدوال foo و bar بإرجاع كائنات تحتوي على القيم التي تريد استخدامها في الدالة compare. ثم يتم تمرير هذه الكائنات كمعلمات إلى الدالة compare.

    المزيد من المعلومات

    بالطبع، دعني أستكمل المقال لشرح المفاهيم بشكل أعمق وتوضيح بعض النقاط الإضافية.

    فهم المتغيرات في جافا سكريبت:

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

    استخدام الوظائف كمعلمات:

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

    الحل البديل: استخدام الإرجاع من الدوال:

    بالإضافة إلى تمرير قيم المتغيرات كمعلمات، يمكنك أيضًا استخدام عبارة الإرجاع (return statement) لإرجاع قيم المتغيرات من الدوال. هذا يسمح لك بالحصول على قيم المتغيرات من دوال أخرى عند استدعائها.

    تنظيم الكود وتجنب التلويث:

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

    خلاصة:

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

  • حل مشكلة botocore.parameters في awscli

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

    عمومًا، يمكن أن تكون هناك عدة أسباب لهذا الخطأ. قد يكون هناك تعارض في الإصدارات، أو قد تكون الوحدة غير مثبتة بشكل صحيح، أو قد تكون هناك مشكلة في بيئة Python الخاصة بك.

    لحل هذه المشكلة، يمكنك تجربة الخطوات التالية:

    1. تأكد من إصدار botocore المثبت: تأكد من أنك تستخدم إصدارًا متوافقًا من botocore مع إصدار awscli الذي تستخدمه. قد تحتاج إلى تحديث botocore إلى الإصدار المطلوب.

    2. أعد تثبيت awscli: قد يكون من المفيد إعادة تثبيت awscli للتأكد من تثبيت كافة الوحدات اللازمة بشكل صحيح.

    3. تحقق من بيئة Python: تأكد من أن بيئة Python الخاصة بك معروفة ومحددة بشكل صحيح. قد يكون هناك تعارض في بيئة Python أو إعدادات الطريق الخاصة بها.

    4. استشارة وثائق AWS: قد تحتوي وثائق AWS على معلومات إضافية حول هذا الخطأ وكيفية حله.

    5. البحث عبر المنتديات والمجتمعات: قد يكون هناك مستخدمون آخرون واجهوا نفس المشكلة ونشروا حلولًا في المنتديات أو المجتمعات المخصصة للمطورين.

    6. التحقق من التراخيص والصلاحيات: تأكد من أن لديك الصلاحيات الكافية للوصول إلى واستخدام الوحدات المطلوبة.

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

    المزيد من المعلومات

    بعد مراجعة العديد من الحلول المحتملة لهذه المشكلة، يمكن أن تكون هناك أسباب أخرى تستدعي النظر. من بينها:

    1. تحديث مكتبات Python: قد يكون السبب في هذا الخطأ هو عدم تحديث مكتبات Python المطلوبة. في حالة وجود أوامر قديمة تشير إلى مكتبات قديمة، قد يتعين عليك تحديثها باستخدام أدوات إدارة الحزم مثل pip.

    2. استخدام بيئة افتراضية: يمكنك تجربة إنشاء بيئة افتراضية Python باستخدام أدوات مثل virtualenv. هذا يسمح لك بتجربة إصدارات مختلفة من الحزم دون أن تؤثر على بيئة Python الرئيسية.

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

    4. التحقق من تكوين البيئة: يمكن أن يحدث هذا الخطأ في حالة عدم وجود تكوين صحيح للبيئة الخاصة بك، مثل مسارات البحث الخاصة بالوحدات والمكتبات.

    5. إعادة تثبيت botocore و awscli بشكل يدوي: في بعض الحالات، قد يكون من الأفضل إزالة botocore و awscli تمامًا ثم إعادة تثبيتهما بشكل يدوي للتأكد من تثبيتهما بشكل صحيح.

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

    باستكمال هذه الخطوات، يمكنك زيادة فرصك في حل هذه المشكلة بنجاح. يُحَذَّر دائمًا من تنفيذ أي تغييرات على بيئة الإنتاج دون اختبار جيد وفهم الآثار المحتملة. إذا لم تتمكن من حل المشكلة بنفسك، فمن الأفضل طلب المساعدة من مجتمع المطورين أو الاستعانة بخدمات الدعم الفني المتخصصة.

  • تحديث تحميل المكونات في Angular2 Router

    يبدو أنك تواجه مشكلة في إعادة تحميل مكونات Angular2 Router 2.0.0 عند تحميل نفس عنوان URL ولكن مع معلمات مختلفة. في الإصدارات السابقة من الموجه، كانت المكونات تعيد تحميل نفسها عند تغيير المعلمات في عنوان URL. ومع ذلك، في الإصدار الذي تستخدمه الآن (Angular2 Router 2.0.0)، يبدو أن هذا التصرف قد تغير.

    لحل هذه المشكلة، يمكنك استخدام إستراتيجيات مختلفة:

    1. إعادة تحميل الصفحة بالكامل عند التغيير: يمكنك استخدام Router.navigate مرة أخرى مع العنوان URL الحالي والمعلمات الجديدة. هذا سيؤدي إلى إعادة تحميل الصفحة بالكامل واستدعاء دالة ngOnInit في المكونات.

    2. تتبع التغييرات في المعلمات بنفس المكون: بدلاً من الاعتماد على إعادة تحميل الصفحة بالكامل، يمكنك استخدام ActivatedRoute للاشتراك في تغييرات في المعلمات وإعادة تحميل البيانات فقط داخل المكون.

    3. تغيير استراتيجية الموجه: قد ترغب في استخدام استراتيجية موجه مختلفة مثل paramsInheritanceStrategy: 'always' لضمان إعادة تحميل المكونات عند تغيير المعلمات.

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

    المزيد من المعلومات

    بالطبع، دعني أوضح كل خيار بشكل أكبر لمساعدتك في اتخاذ القرار المناسب:

    1. إعادة تحميل الصفحة بالكامل عند التغيير:

      عند استخدام هذا الخيار، ستستخدم Router.navigate مرة أخرى لتوجيه المستخدم إلى نفس العنوان URL مع المعلمات الجديدة. يعتبر هذا الخيار بسيطًا ومباشرًا، حيث يؤدي إعادة تحميل الصفحة بالكامل إلى استدعاء دالة ngOnInit في المكونات وتحديث البيانات بشكل كامل. ومع ذلك، قد يؤدي هذا الخيار إلى فقدان بيانات الحالة أو تأثيرات جانبية مثل فقدان تفاصيل النموذج المستخدم أو إعادة تهيئة حالة المكونات بشكل غير مرغوب فيه.

    2. تتبع التغييرات في المعلمات بنفس المكون:

      في هذا الخيار، يمكنك استخدام ActivatedRoute للاشتراك في تغييرات في المعلمات وتحديث البيانات داخل المكون بدون إعادة تحميل الصفحة بالكامل. هذا يسمح بتجنب فقدان بيانات الحالة وتأثيرات جانبية غير مرغوب فيها. بدلاً من ذلك، يتم تحديث البيانات فقط عندما تتغير المعلمات. يمكنك استخدام هذا الخيار إذا كنت ترغب في توفير تجربة مستخدم أكثر سلاسة وتفعيل التحميل الجزئي للبيانات.

    3. تغيير استراتيجية الموجه:

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

    باختيار الخيار المناسب، يمكنك تحقيق التوازن بين إعادة تحميل الصفحة بالكامل وتحميل جزئي للبيانات بحسب احتياجات تطبيقك وتفضيلات تجربة المستخدم. تأكد من اختبار الحل المختار بشكل جيد لضمان أنه يلبي توقعاتك ويعمل بشكل صحيح مع تطبيقك.

  • POST Request Without Parameters Using XML

    للقيام بطلب POST باستخدام XML دون استخدام معلمات، يجب عليك تحديد نوع المحتوى الذي تريد إرساله كـ XML وضمان تضمينه في جسم الطلب. هناك العديد من الطرق للقيام بذلك باستخدام لغات البرمجة المختلفة. فيما يلي مثال باستخدام لغة برمجة مثل Python ومكتبة requests:

    python
    import requests url = 'http://example.com/api/endpoint' xml_data = '' headers = { 'Content-Type': 'application/xml', } response = requests.post(url, headers=headers, data=xml_data) print(response.text)

    في هذا المثال، نقوم بتحديد نوع المحتوى كـ ‘application/xml’ في الرأس (headers)، ثم نقوم بإرسال بيانات الـ XML كجزء من بيانات الجسم (data) للطلب POST.

    يجب عليك استبدال http://example.com/api/endpoint برابط النهاية الفعلية التي تريد إرسال الطلب إليها، و بالبيانات الفعلية التي تريد إرسالها بتنسيق XML.

    المزيد من المعلومات

    بالتأكيد! إذا كنت تستخدم لغة برمجة أخرى مثل Java، يمكنك استخدام مكتبة مثل HttpURLConnection لإرسال طلب POST بتنسيق XML. فيما يلي مثال بسيط يوضح كيفية القيام بذلك:

    java
    import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class Main { public static void main(String[] args) throws Exception { URL url = new URL("http://example.com/api/endpoint"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/xml"); conn.setDoOutput(true); String xmlData = ""; try (OutputStream os = conn.getOutputStream()) { byte[] input = xmlData.getBytes("utf-8"); os.write(input, 0, input.length); } int responseCode = conn.getResponseCode(); System.out.println("Response code: " + responseCode); conn.disconnect(); } }

    في هذا المثال، نقوم بتحديد نوع المحتوى كـ ‘application/xml’ في الرأس، ثم نقوم بإرسال بيانات الـ XML كجزء من الجسم. يجب استبدال "http://example.com/api/endpoint" برابط النهاية الفعلية و بالبيانات الفعلية التي تريد إرسالها بتنسيق XML.

    يرجى ملاحظة أن هذا المثال يعتمد على Java 8 أو أحدث، وقد تحتاج إلى التعديل بما يتناسب مع الإصدار الذي تستخدمه من Java.

  • Logging with Lambda Parameters in Kotlin

    In Kotlin, you can achieve the same behavior as the Java example by using a lambda directly without the curly braces. This allows the lambda to be lazily evaluated, similar to how it works in Java. Here’s how you can do it:

    kotlin
    log.debug("random {}", { UUID.randomUUID() })

    However, this will indeed print the lambda type, not its result. To print the result of the lambda, you need to explicitly invoke it:

    kotlin
    log.debug("random {}", { UUID.randomUUID() }())

    This will print the random UUID generated by the lambda function.

    المزيد من المعلومات

    بالتأكيد! في Kotlin، يمكنك استخدام تعبير اللامبدا بدون إشارات التقويس {} لتحقيق نفس السلوك كما في المثال الذي ذكرته من log4j2. هذا يسمح بتقييم التعبير بشكل كسول، مماثلاً لكيفية عمله في Java. هنا كيف يمكنك القيام بذلك:

    kotlin
    log.debug("random {}", { UUID.randomUUID() })

    ومع ذلك، سيتم طباعة نوع التعبير اللامبدا، لا نتيجته. لطباعة نتيجة التعبير اللامبدا، يجب عليك استدعاءها بشكل صريح:

    kotlin
    log.debug("random {}", { UUID.randomUUID() }())

    سيقوم هذا بطباعة الـ UUID العشوائي الذي تم إنشاؤه بواسطة دالة التعبير اللامبدا.

  • ما هي المعاملات في سكالا (Scala)؟

    المعاملات أو “parameters” في سكالا (Scala) مثل المعاملات في العديد من لغات البرمجة الأخرى. هي قيم تمرر إلى دالة أو طريقة لتمكينها من القيام بعملية معينة. يتم إدخال المعاملات بين قوسين وفاصلة، ويمكن تمرير معاملات أو عدم تمريرها، وتستخدم المتغيرات كمعاملات لتمرير القيم إلى الدالة أو الطريقة.

    هناك نوعان من المعاملات في سكالا:
    1. المعاملات الإجبارية (mandatory parameters): وهي المعاملات التي يتعين تمريرها إلى الدالة لأنها ضرورية لأداء العملية المحددة.
    2. المعاملات الاختيارية (optional parameters): وهي المعاملات التي لا يتعين تمريرها إلى الدالة ويمكن تركها كباراميترات اختيارية. يمكن تحديد القيم الافتراضية للمعاملات الاختيارية إذا لم تتم تمرير قيم لها.

    علاوة على ذلك، يمكن تعريف المعاملات ك class parameters في حالة تعريف الفئات. في هذه الحالة، ستكون المعاملات متوفرة لجميع أعضاء الفئة.

  • ما هي هياكل الدوال في علم الحساب؟

    هياكل الدوال في علم الحساب تختلف اعتمادًا على نوع اللغة البرمجية، ولكن في العموم تحتوي هذه الهياكل على:

    1- التعريف (definition)، والتي تحدد الدالة ومتطلبات إدخالها وإخراجها.

    2- تسمية (naming)، والتي تشير إلى اسم الدالة المُتخيَّلة.

    3- الجسم (body)، والذي يحتوي على الأوامر والتعليمات اللازمة لتنفيذ الدالة.

    4- الإدخال (parameters)، والذي يمكِّن من إعطاء قيم محددة عند استدعاء الدالة.

    5- الإخراج (return)، والذي يُرجع النتيجة المحسوبة من الدالة.

    6- المعاملات الخارجية (outputs)، والتي تتيح للدالة إرسال بيانات خارج الدالة لحفظها أو استخدامها فيما بعد.

  • كيف يمكن التحكم في ظلال المنظور في ثري دي ستديو ماكس؟

    يمكن التحكم في ظلال المنظور في ثري دي ستديو ماكس باستخدام أداة Shadow Map Parameters. يمكن الوصول إليها بالنقر بزر الماوس الأيمن على الضوء ثم اختيار Shadow Map Parameters.

    يمكن ضبط خصائص الظلال مثل الكثافة والنعومة والفترة الزمنية وزاوية المنظور. كما يمكن تعيين الظلال على أسطح محددة مثل مجموعات الكائنات أو المواد.

    بالإضافة إلى ذلك ، يمكن استخدام الخيارات المتقدمة للتحكم في إضاءة المشهد ، مثل إضافة أضواء إضافية أو استخدام تقنيات الإضاءة المتقدمة مثل Global Illumination و Ambient Occlusion.

  • ما هو نوع الدالة في تايب سكريبت؟

    يوجد العديد من أنواع الدوال في تايب سكريبت، بعض منها:

    1- الدوال المسماة (Named Functions): يتم تعريفها باستخدام الكلمة الأساسية function ثم اسم الدالة والمعاملات إن وجدت.

    2- الدوال المجهولة (Anonymous Functions): يتم تعريفها دون تحديد اسم الدالة، عن طريق إسناد الدالة المجهولة لمتغير.

    3- الدوال السهمية (Arrow Functions): تعتبرنسخة من الدوال المجهولة، وتستخدم السهام (=>) بدلاً من الكلمة الأساسية function.

    4- دوال الإسقاط (Callback Functions): هي دوال يتم إرسالها كمعلمة داخل دالة أخرى وتتم استدعاءها في وقت لاحق بمجرد حدوث حدث معين أو إتمام عملية معينة.

    5- الدوال البيراميترية (Parameters Functions): تتميز بقدرتها على استقبال معاملات تمرر إليها عند الاستدعاء.

    6- الدوال المولدة (Generator Functions): تستخدم لإرجاع قيم متعددة بشكل تتابعي، وليس فقط قيمة واحدة.

    7- الدوال المتداخلة (Nested Functions): هي الدوال التي تم ضمها داخل دوال أخرى. وتسمى دوالًا مُتداخِلَة لأنها يتم استدعاؤها داخل دوال أخرى لتقوم بتنفيذ مهام محددة في سياق هذه الدال.

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر