اذهب إلى المحتوى

Mustafa Suleiman

الأعضاء
  • المساهمات

    13209
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    365

كل منشورات العضو Mustafa Suleiman

  1. من المفترض أن يعمل الملف الثاني Suv بدون مشكلة فكلاهما في نفس الـ Package، عند الضغط على زر Run ما الذي يحدث؟ تأكد من حفظ الكود ثم تشغيله.
  2. في حال تريد ترشيح تقنية واحدة فقط للعمل بها في أغلب مشاريعك فستكون Redis بلا جدال ومطلوبة من ضمن مهارات العمل كمطور واجهة خلفية لذا هي تستحق وقتك بالطبع ومتنوعة الاستخدام ولديها توافق ممتاز مع PHP وستجد إطار مثل Laravel يوفر دعمًا مباشر للعمل من خلالها بسهولة ومناسبة للمشاريع الصغيرة والكبيرة.
  3. ما يستحق وقتك حاليًا هو docker حيث ستتجنب الكثير من المشاكل وتوفر الكثير من الوقت بدلاً من تضييعه في حل مشاكل بيئة التطوير، وأيضًا في بيئة الإنتاج حيث تستطيع نشر المشروع من خلال docker. وتستطيع مشاركة نفس بيئة التطوير التي لديك من خلال ملف docker مع أي شخص وسيقوم بتشغيل المشروع على نفس البيئة بغض النظر عن نظامه. بخصوص Golang فهي بديل للغة C/C++ ولكن بشكل أبسط وأسهل، فهي مطلوبة في الشركات الأجنبية أكثر، لكن هناك شركات عربية تستخدمها ومطوريها ليسوا بالكثيرين لذا مرتباتها مرتفعة. ومن مميزاتها أن البرامج أو المنصات المبنية من خلالها أسرع ولديها وقت تحميل بسيط وأيضًا تتطلب موارد منخفضة بالتالي تخفيض التكلفة للتطبيقات التي تحتاج إلى أداء عالي مع خفض التكلفة لتحقيق ربح. فلو قمت بذلك من خلال PHP أو جافاسكريبت فلن تتمكن من تحقيق ذلك. أيضًا تتميز بـ multithreaded architecture والمفيدة في بناء large-scale distributed systems و high-performance applications، ويتم عمل compile لها للغة الآلة مباشرًة. وأنت محق في أن Go لا تمتلك ميزات البرمجة كائنية التوجه التقليدية مثل الوراثة والتغليف وتعدد الأشكال، وذلك لا يعني أنه ليس باستطاعتك كتابة كود كائن التوجه في Go، الفكرة أنه تجنب مصممو Go عمدًا بعض مفاهيم البرمجة كائنية التوجه، مع التركيز على البساطة والتزامن concurrency والأداء. والنهج الذ ي إتبعوه هو الإعتماد على الهياكل Structs حيث تشبه هياكل Go الفئات في لغات البرمجة كائنية التوجه، ويمكن أنّ تحتوي على حقول وطرق، الأمر الذي يسمح لك بتعريف هياكل بيانات وسلوكيات مخصصة. والتكوين Composition بمعنى تشجع Go التكوين على الوراثة، فتستطيع إنشاء هياكل تحتوي على هياكل أخرى أو مراجع لها، مما يحقق تأثيرًا مشابهًا للوراثة. والـ Interfaces والتي توفر طريقة لتعريف عقد أو مجموعة من الأساليب التي يجب على نوع معين تنفيذها، وذلك يسمح بتعدد الأشكال وفك الارتباط. بالإضافة إلى الـ Dependency injection حيث توفر مكتبة Go القياسية والأطر الشائعة آليات لحقن التبعية، الأمر الذي يساعد في التجزئة وإمكانية الاختبار. أما بخصوص Golang Frameworks فما ذكرته غير صحيح، حيث يتوفر لها عدّة إطارات وأشهرها Gin وهو إطار للويب لديك أيضًا: Beego Buffalo Echo ويوجد Revel كإطار full-stack للويب.
  4. تتوفر طرق مختلفة، أولها يدويًا بإنشاء سكربت SQL لاستيراد بيانات CSV إلى قاعدة البيانات، يتضمن ذلك إنشاء جدول بنفس بنية ملف CSV ثم استخدام عبارة INSERT INTO لملء الجدول بالبيانات من ملف CSV. أو استخدام أداة تحويل من CSV إلى SQL، وهنالك العديد من الأدوات والبرامج المتاحة عبر الإنترنت والتي يمكنها تحويل ملفات CSV إلى صيغة SQL، وعلى سبيل الذكر أدوات CSV to SQL و Convert CSV to SQL و CSV2SQL. أو الأفضل استخدام بايثون لقراءة ملف CSV وإنشاء سكربت SQL لاستيراد البيانات إلى قاعدة البيانات. import csv import sqlite3 conn = sqlite3.connect('database.db') cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS mytable ( column1 TEXT, column2 INTEGER, column3 REAL ); ''') with open('data.csv', 'r') as csvfile: reader = csv.reader(csvfile) for row in reader: cursor.execute(''' INSERT INTO mytable (column1, column2, column3) VALUES (?, ?, ?); ''', row) conn.commit() conn.close() في المشاريع الواقعية، ستجد أنه يتم الإعتماد على قواعد بيانات SQL لتخزين وإدارة مجموعات البيانات الكبيرة، بينما ملفات CSV لتصدير البيانات واستيرادها، ولكن ليس كحل أساسي لتخزين البيانات. للتوضيح، في مشروع نظام التوصية، تستخدم قاعدة بيانات SQL لتخزين بيانات سلوك المستخدم وبيانات تعريف العنصر ونماذج التوصية، وملفات CSV لتصدير البيانات للتحليل أو لاستيراد بيانات جديدة إلى النظام. وفي مشروع معالجة اللغة الطبيعية، تستخدم قاعدة بيانات SQL لتخزين البيانات النصية والتعليقات التوضيحية ومخرجات النموذج، وملفات CSV لتصدير البيانات للتحليل أو لاستيراد بيانات جديدة إلى النظام. حيث توفر قواعد بيانات SQL طريقة ملائمة لإعداد البيانات ومعالجتها مسبقًا لنماذج تعلم الآلة والتعلم العميق، وقيودًا على سلامة البيانات، مثل المفاتيح الأساسية والمفاتيح الخارجية، لضمان اتساق البيانات ودقتها بجانب أنّ SQL لغة استعلام قوية تسمح لك بإجراء تحليلات وتصفية معقدة للبيانات. أيضًا توف طريقة لمراجعة البيانات، وهو أمر ضروري في تعلم الآلة والتعلم العميق حيث تكون جودة البيانات أمرًا بالغ الأهمية، وتسمح لك بإنشاء إصدارات من البيانات، وهو أمر ضروري في تعلم الآلة والتعلم العميق حيث تتغير البيانات باستمرار.
  5. بالضبط ذلك ما ذكرته لك آنفًا، فلا يمكن إحتراف كلاهما في تخصص الـ Full-stack ستجد أنك جيد في أحدهما عن الآخر والبعض جيد في كلاهما لكن ليس بمستوى شخص متخصص في أحدهم فقط بالطبع. لذا الـ Tall stack يقوم بتنفيذ المطلوب أي gets the job done وذلك هو المطلوب في الواقع العملي، مع أنني من أنصار دراسة الأساسيات حتى مع عدم تفضيلي للغة معينة لكنها من ضمن الأساسيات والتي من خلالها تستطيع حل المشكلات التي ستواجهك.
  6. العفو أحمد، لكي لا تشتت نفسك، عليك تحديد وجهتك بخصوص التخصص في البرمجة هل تريد أن تصبح Full-stack أم مطور Back-End فقط؟ في حال مطور واجهة خلفية فتعلمك لإطار أو مكتبة للواجهة الأمامية للقيام بمشاريع بمفردك هو كافي مع التعمق في الواجهة الخلفية بالطبع. أما لو تريد أن تصبح Full-stack فلا يمكن أن تكون محترف في كلاٌ من الواجهة الأمامية والخلفية معًا فالمجالين بهما الكثير لتتعلمه وأيضًا ستجد أنك تميل لتخصص عن تخصص أكثر، في كل الأحوال عليك إذن هنا تعلم أساسيات الواجهة الأمامية HTML, CSS, JS ونفس الأمر للواجهة الخلفية وبالأخص SQL. قد تخبرني بأنك لا تفضل CSS، إذن تستطيع تعلم المكتبات المشهورة مثل Tailwinds CSS وهي الأشهر حاليًا وستسهل عليك المهمة كثيرًا ويوجد لها الكثير من المكونات الجاهزة، لكن لن تستطيع تخصيص مشروعك بشكل كبير مثلما ستفعل لو تمكنت من CSS. أيضًا ألقي نظرة على مكتبة shadcn فستنال إعجابك.
  7. ذلك غير صحيح، علوم الحاسوب هي ما ستفيدك لتكون مبرمج متميز ومتفهم لما يقوم به وما يحدث بالخلفية وليس مستخدم للتقنية فقط كغالب المبرمجين، ومن حاله كذلك في الوقت الحالي لن يدوم طويلاً مستقبلاً. بالتالي ما تدرسه في الجامعة من آلية عمل نظام التشغيل ومفهوم الـ Concurrency به، وهياكل البيانات والخوارزميات ولغة الحاسوب أي binary وأيضًا دراسة لغة برمجة قوية مثل C++ أو جافا والتي تؤسسك برمجيًا بشكل عميق وسليم بالإضافة إلى أساسيات الـ Network وذلك ما يجعل منك مبرمج جيد يستطيع دراسة أي شيء أي مهندس برمجيات. هل يوجد من يعمل بسوق العمل دون فهم ما سبق؟ نعم يوجد وكثير ما هم، حيث يتعلم التقنيات مثل React و Next.js او لارافل المطلوبة للوظيفة وليس الأساسيات، وفي الوقت الحالي من الصعب أن يجد من يحذوا حذوهم فرصة في سوق العمل حيث يجب التأسيس بشكل جيد لأنه يتم الفلترة في مقابلات العمل. لكن هل يكفي تعلم ما يتم تدريسه بالجامعة فقط؟ بالطبع لا فستحتاج إلى تعلم المهارات المطلوبة للوظيفة وذلك يسمى بالـ Technology
  8. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  9. طالما تم قبول مشروع التخرج فستتوافر شهادة إلكترونية لها رابط خاص بك على موقع أكاديمية حسوب. يمكنك طلب الشهادة الورقية أيضًا وسيتم شحنها لك، والشهادة متوفرة الكترونيا وهذا يمكّن من التحقق منها بطلب الرابط الخاص بها وهو خاص بكل شهادة طالب حيث سيكون هنالك ملف مرفوع على مخدمات الأكاديمية لتأكيد حصولك على الشهادة، لذا أرجو التحدث لمركز المساعدة وطلب الشهادة.
  10. ذلك KML (لغة ترميز Keyhole) وذلك عبارة عن تنسيق أو صيغة ملف لعرض البيانات الجغرافية ثلاثية الأبعاد في خرائط Google Earth وخرائط Google ثنائية الأبعاد وخدمات رسم الخرائط الأخرى. أي تخيل أن ملف KML هو مثل وصفة طعام لخريطة يحتوي على مجموعة من التعليمات التي تخبر برنامج الخرائط بكيفية عرض البيانات الجغرافية: خطوط الطول والعرض لنقاط، وخطوط، ومضلعات على الخريطة. صور تمثل مواقع أو أنواع مختلفة من البيانات. تنظيم البيانات في مجموعات مختلفة، مثل طبقة للمطاعم وطبقة للفنادق. معلومات نصية تظهر عند النقر فوق موقع أو رمز على الخريطة. صور ثلاثية الأبعاد: نماذج ثلاثية الأبعاد للمباني أو المعالم. في البداية ابحث في مواقع مثل ArcGIS Online أو Data.gov عن ملفات KML عامة للمنطقة واستخدم كلمات مفتاحية مثل KML واسم منطقتك أو نوع البيانات التي تبحث عنها (مثل "حدود KML للجزيرة العربية"). وستجد مواقع مثل KML library for countries, states and region borders أو اعتمد على برامج مثل Google Earth Pro أو ArcGIS لإنشاء ملف KML للمنطقة التي تريدها وارسم الحدود أو أضف النقاط.
  11. مبارك لك، ما تحتاجه الآن تحديد التخصص الذي تنوي تطوير مستواك به في الفترة القادمة هل هو الذكاء الاصطناعي أم تحليل البيانات؟ ما زال سنك صغير لذا تستطيع تعلم كلاهما لا مشكلة لكن عليك تحديد تخصص واحد ثم الإلتزام به والاستمرار في الـRoadmap الخاصة به، وبعد سنة مثلاً تستطيع تعلم تخصص آخر. وهناك أمر يجب توضيحه، لا توجد تلك الدورة التي توفر لك كل شيء، بل تضعك على بداية الطريق على أرض صلبة ثم عليك تطوير مستواك وسيتم إرشادك نحو ذلك خلال الفترة القادمة.
  12. في حال لم تكن لغتة الإنجليزية قوية أي تستطيع القراءة والاستماع والبحث والاستيعاب بشكل جيد، فعليك إذن بتعلم دورة علوم الحاسوب ودورة PHP وذلك هو المناسب في الوقت الحالي لكي تتمكن من العمل بعد الدورة على مواقع العمل الحر مثل مستقل وخمسات. أما المناسب لمجال دراستك فهو دورة علوم الحاسوب ودورة الذكاء الاصطناعي، لكن ذلك المجال بحاجة إلى دراسة مكثفة على فترة ليست بالقصيرة لذا لا تتوقع أن تجد عملاً مباشرًة، وذلك المجال لابد لك من الوصول لمستوى B2 في الإنجليزية على الأقل. بخصوص c++ ستجد على اليوتيوب الكثير من المصادر عليك بالبحث عن كورس C++
  13. حلقة LOOPNZ ستقوم بالتكرار 10 مرات (القيمة الأولية لـ CX)، وفي كل تكرار، زيادة قيمة AX بمقدار 1، بالتالي بعد انتهاء الحلقة، ستكون قيمة AX هي 12 (2 + 10).
  14. لا تشغل بالك كثيرًا بالجامعة، نعم هي مهمة لكن ليست للدرجة التي يتوقف عليها دخول سوق العمل أم لا، وذلك على عكس كلية الهندسة التي يجب الحصول على شهادتها للعمل في ذلك المجال. أما مجال البرمجة الأهم به هي مهاراتك وخبرتك حيث تستطيع دراسة المعلومات والمهارات التي يتم اكتسابها من الكلية بمفردك من خلال كورسات وتنفيذ مشاريع وبالطبع الأمر بحاجة إلى وقت وليس مجرد 6 أشهر بل الأمر يتراوح ما بين عام إلى عامين على الأقل حسب خلفيتك السابقة.
  15. لنتفقد هل يوجد إتصال سليم بقاعدة البيانات أم لا، أرجو تتنفيذ الاستعلام التالي على الـ vps: SELECT * FROM alsaadirs أيضًا تفقد إصدار MariaDB على الـ VPS وقارنه بالإصدار المحلي لديك، بالإضافة إلى إعدادات الترميز Encoding بتنفيذ التالي: SHOW CREATE TABLE alsaadirs
  16. من المفترض أنه تم تفعيل الثيم فأنتِ تستخدمين إضافة Starter Templates، فعند التوجه للصفحة التي بها القوالب تختاري القالب الذي تريدينه ثم التعديل عليه، ثم الضغط على continue ثم submit and build. حاولي تحديث الصفحة من خلال CTRL + F5، إن استمرت المشكلة جربي حذف وإعادة تثبيت الإضافة ثم المحاولة.
  17. ما ذكرته إذن صحيح، من المفترض ألا يتم تنفيذ الكود إلا في حال مطابقة العنصر الذي حددته، عليك إذن إرفاق الكود لتفقد المشكلة.
  18. بشكل high-level overview وبدون تفصيل، عليك أولاً إنشاء الـ Models: نموذج البائع Vendor : name: اسم البائع (نص). commission_rate: نسبة عمولة البائع (رقم عشري، افتراضياً 0.15 أي 15%). ونموذج المعاملة Transaction: vendor: الرابط بالبائع الذي تمت المعاملة معه (مفتاح أجنبي). amount: إجمالي قيمة الدفع (رقم عشري). payment_date: تاريخ الدفع (تاريخ ووقت). commission_amount: قيمة عمولة البائع (رقم عشري، افتراضياً 0). admin_amount: قيمة المبلغ الذي يحصل عليه المسؤول (رقم عشري، افتراضياً 0). ثم ربط تطبيق Django ببوابة دفع مثل PayPal أو Stripe وعند قيام العميل بالدفع، ستقوم بوابة الدفع بإرسال إشعار إلى تطبيقك. منطق تقسيم الدفع سيتم كالتالي، عند استلام إشعار الدفع، يتم إنشاء كائن جديد في نموذج Transaction ثم يتم حساب قيمة عمولة البائع وقيمة المبلغ الذي يحصل عليه المسؤول حسب نسبة عمولة البائع. def process_payment(payment_data): vendor = Vendor.objects.get(id=payment_data['vendor_id']) transaction = Transaction.objects.create( vendor=vendor, amount=payment_data['amount'], ) commission_amount = transaction.amount * vendor.commission_rate admin_amount = transaction.amount - commission_amount transaction.commission_amount = commission_amount transaction.admin_amount = admin_amount transaction.save() transfer_funds_to_vendor(vendor, commission_amount) transfer_funds_to_admin(admin_amount) ثم نأتي إلى تحويل الأموال، من خلال تنفيذ الدالتين transfer_funds_to_vendor و transfer_funds_to_admin لتحويل المبالغ المحسوبة إلى حسابات البائع والمسؤول على التوالي، وتستطيع القيام بذلك باستخدام واجهة برمجة تطبيقات بوابة الدفع أو خدمة خارجية، كالتالي: دفع العميل مبلغ 100 دولار للبائع بنسبة عمولة 15٪. ستقوم الدالة process_payment بإنشاء كائن Transaction بقيمة 100 دولار. ستحسب الدالة قيمة عمولة البائع: 100 * 0.15 = 15 دولار. ستحسب الدالة قيمة المبلغ الذي يحصل عليه المسؤول: 100 - 15 = 85 دولار. ستقوم الدالة بتحديث كائن Transaction بالقيم المحسوبة. ستقوم الدالة بتحويل 15 دولارًا إلى حساب البائع و 85 دولارًا إلى حساب المسؤول (المبرمج). بالطبع ذلك مثال مبسط، ويجب مراعاة تنفيذ منطق إضافي للتعامل مع الأخطاء والمبالغ المستردة والحالات الأخرى.
  19. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل، فحاليًا السؤال غير واضح وأسفل الدرس يتم ربط سؤالك بمحتوى الدرس والكود المشروح.
  20. 1- مسار تطبيق تعلم اللغات بتقنيات الذكاء الاصطناعي في دورة الجافا سكربت next.js react emotion/react mui openAI API 2- مسار بناء صفحات هبوط HTML CSS JS jQuery Bootstrap font-awesome 3- مسار تطوير لوحة تحكم HTML CSS JS sass fortawesome Bootstrap webpack 4- مسار تطوير موقع اخباري HTML CSS JS sass fortawesome Bootstrap prism
  21. إذن الثيم لم يتم تفعيله أو الضغط على نشر publish أي ما زال في وضع التعديل غالبًا.
  22. توجهي إلى إعدادات ووردبريس ثم اختاري themes أو المظهر وختاري الثيم الذي تريدينه وتأكدي من تفعيله بالضغط على activate. هل الثيم مفعل؟ وهل يظهر في حال تسجيل الدخول ك admin ؟
  23. بشكل مٌبسط، Polymorphism أو تعدد الأشكال عبارة عن قدرة الكائن على اتخاذ أشكال متعددة، أي يمكن لكائن من صنف معين أن يتصرف بطرق مختلفة اعتمادًا على السياق. بمعنى تخيل أن لديك صنف اسمه "حيوان" وصنفين فرعيين منه هما "قطة" و "كلب". تستطيع إنشاء متغير من نوع "حيوان" وإسناد إليه إما كائن من نوع "قطة" أو "كلب"، وعند استدعاء دالة مثل "اصدر صوتًا" على ذلك المتغير، سيتم تنفيذ الدالة الخاصة بالصنف الفرعي (قطة أو كلب) المخزن في المتغير. وبخصوص أنواع Polymorphism في C#: Static Polymorphism تعدد الأشكال الساكن: والذي يتم تحديده في وقت الترجمة Compile Time من خلال Overloading (زيادة التحميل) للـ Methods و Operators. Dynamic Polymorphism تعدد الأشكال الديناميكي: يُحدد في وقت التشغيل Runtime من خلال Overriding (التجاوز) للـ Methods باستخدام الكلمات المفتاحية virtual, override, و abstract. 2- Abstract Class الصنف المجرد هو صنف لا يمكن إنشاء كائنات منه مباشرة، ويستخدم كقالب للصفات والوظائف المشتركة بين الأصناف الفرعية. وله الخصائص التالية: يُعرّف باستخدام الكلمة المفتاحية abstract. متاح له أن يحتوي على دوال مجردة Abstract Methods ودوال غير مجردة. الدوال المجردة لا تحتوي على تنفيذ Implementation داخل الصنف المجرد، ويجب على الأصناف الفرعية التي ترث منه توفير تنفيذ لهذه الدوال. مثلاً إنشاء صنف مجرد "شكل" يحتوي على دالة مجردة "احسب المساحة"، وستقوم الأصناف الفرعية مثل "مربع" و "دائرة" بوراثة ذلك الصنف وتوفير تنفيذ خاص بها لدالة "احسب المساحة". 3- Interface الواجهة هي بمثابة عقد Contract يحدد مجموعة من الدوال التي يجب على الصنف الذي ينفذها توفيرها. ولها الخصائص التالية: تُعرّف باستخدام الكلمة المفتاحية interface. تحتوي فقط على تعريفات دوال Signatures ولا تحتوي على أي تنفيذ. متاح للصنف أن ينفذ أكثر من واجهة. مثل إنشاء واجهة "قابلة للرسم" تحتوي على دالة "ارسم"، فيمكن للعديد من الأصناف مثل "دائرة" و "مربع" و "صورة" تنفيذ هذه الواجهة وتوفير تنفيذ خاص بها لدالة "ارسم". بالتالي الواجهة الغرض منها تحديد سلوك Behavior معين يمكن للعديد من الأصناف تطبيقه، بينما الصنف المجرد هو لتوفير هيكل أساسي مشترك للأصناف الفرعية
  24. تلك عبارة عن دوال يتم تعريفها بدون اسم، أي بدلاً من تعريفها باستخدام الكلمة المفتاحية function متبوعة باسم، نقوم تعريفها باستخدام الكلمة المفتاحية function فقط، أو باستخدام صيغة arrow function. function() { console.log(" دالة عديمة الاسم!"); } والدوال عديمةالاسم لا نستطيع إعادة استخدامها مباشرًة، فليس لها اسم نستطيع من خلالها استدعائها. أيضًا لا يتم تنفيذ الرفع Hoisting لها، أي لا تستطيع استدعائها قبل تعريفها في الكود أي قبل السطر الخاص بها في الكود، فنحن لا نستطيع ذلك بدون اسم لذا لا يتم رفعها. والفائدة منها هي استخدامها كدالة IIFE أي كـ (Immediately Invoked Function Expression) وهي دوال يتم تعريفها وتنفيذها مباشرةً. (function() { console.log("أنا دالة عديمة الاسم!"); })(); لاحظ الأقواس التي حول الدالة والقوسين بعدها والتي تعني تنفيذها مباشرًة فور الوصول لتلك الدالة في الكود من قبل المترجم. بالتالي في أي موضع لا تحتاج به إعادة استخدام تلك الدالة مرة أخرى في الكود، فقم بكتابتها بدون اسم، مثل دالة IIFE. أو مثلاً كـ دوال Callback والتي تستخدم بكثرة كـ دوال يتم تمريرها كمعامل لدوال أخرى، مثل دوال معالجة الأحداث أو دوال setTimeout و setInterval. setTimeout(function() { console.log("تم تنفيذ هذه الدالة بعد ثانية واحدة"); }, 1000); أيضًا مع دوال ذات ترتيب أعلى Higher-Order Functions مثل map و filter و reduce. const numbers = [1, 2, 3, 4, 5]; const doubledNumbers = numbers.map(function(number) { return number * 2; }); وللعلم توفر جافاسكريبت صيغة مختصرة لكتابة الدوال عديمة الاسم، وهي Arrow Function. const sum = (a, b) => a + b; فلا تحتاج إلى استخدام الكلمة المفتاحية function، ولا تحتاج إلى استخدام الأقواس {} أو الكلمة المفتاحية return إن كان جسم الدالة يتكون من سطر واحد فقط، وترث قيمة this من النطاق scope المحيط بها. وعلى الرغم من أنك تستطيع استخدام المتغير sum لاستدعاء الدالة أي من خلال اسم، لكن الدالة نفسها بدون اسم، لذا الأمر قد يحيرك قليلاً لفهمه.
×
×
  • أضف...