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

Mustafa Suleiman

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

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

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

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

    305

أجوبة بواسطة Mustafa Suleiman

  1. أولاً وقبل أي شيء السمات المدعومة هي السمات التي تم تحديدها في وثائق HTML الرسمية، وتلك السمات مدعومة من قبل جميع المتصفحات الحديثة.

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

     بعض الأمثلة على السمات المدعومة:

    • type
    • name
    • value
    • placeholder
    • required
    • autocomplete

    بعض الأمثلة على السمات المخصصة:

    • username-field
    • improve-input
    • rm-white-spaces
    • to-arabic-numbers
    • to-lower

    ويمكنك معرفة السمات المدعومة من خلال موقع MDN أو قم بالبحث عن السمة في جوجل وبجانبها كلمة HTML.

    autocomplete="on"

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

    username-field

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

    improve-input

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

    rm-white-spaces

    تزيل هذه السمة جميع المسافات البيضاء من قيمة الحقل، إذا قام المستخدم بإدخال "هذا هو اسم المستخدم الخاص بي" في الحقل، فسيتغير النص إلى "هذاهواسمالمستخدمالخاصبي".

    to-arabic-numbers

    تُحول تلك السمة الأرقام في قيمة الحقل إلى الأبجدية العربية، فمثلاً إذا قام المستخدم بإدخال "12345" في الحقل، فسيتغير النص إلى "١٢٣٤٥".

    to-lower

    تعمل السمة على تحويل جميع الحروف في قيمة الحقل إلى أحرف صغيرة، وعند قيام المستخدم بإدخال "THIs my Username" في الحقل، فسيتغير النص إلى "thismyusername".

    وإليك مثال للتوضيح:

    لنفترض أن لدينا صفحة ويب تحتوي على حقل إدخال اسم مستخدم يُستخدم لتسجيل الدخول إلى الموقع، ونريد أن نجعل حقل الإدخال يُعبأ تلقائيًا بالقيمة السابقة لاسم المستخدم، وأن نزيل المسافات البيضاء من قيمة الحقل، وأن نحول الأرقام إلى الأبجدية العربية، وأن نحول جميع الحروف إلى أحرف صغيرة.

    فسيكون الكود كالتالي:

    <input type="text" name="username" class="login-input name" placeholder="ادخل رمز الكرت هنا" required autocomplete="on" username-field improve-input rm-white-spaces to-arabic-numbers to-lower/>

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

    بالإضافة إلى أنه سيتم إزالة المسافات البيضاء من قيمة الحقل، وستتم تحويل الأرقام إلى الأبجدية العربية، وستتحول جميع الحروف إلى أحرف صغيرة.

     

     

  2. بالنسبة للمواقع التي ذكرتها فالأول يعتمد على Drupal وليس ووردبريس، والثاني يعتمد على ووردبريس ويستخدم قالب مخصص.

    وبإمكانك أنت البحث عن قوالب خاصة بالـ coupons على المنصات التي توفر قوالب ووردبريس مثل موقع themeforest، وبالبحث عن coupons ستجد النتائج التالية:

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

    والتكلفة تعتمد على المميزات التي تريد توافرها بالموقع والتصميم وخلافه وأيضًا خبرة المبرمج.

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

    • أعجبني 1
  3. من الأفضل دائمًا إنشاء بيئة إفتراضية لكل مشروع تقوم بإنشاؤه لتجنب مثل تلك المشاكل وأيضًا تجنب تعارض بين إصدارات الحزم المثبتة بشكل عالمي.

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

    والحل هو إما بإختيار مترجم بايثون الصحيح في محرر الأكواد والذي تم به تثبيت المكتبة، أو إنشاء بيئة إفتراضية venv أو pipenv وثتبيت المكتبات اللازمة، أو تثبيت المكتبة في مترجم بايثون الحالي من خلال الأمر التالي:

    pip install pygame

     

    • أعجبني 1
  4. Symfony يعتبر أكثر أطر PHP توجهًا نحو مفهوم "المكونات" و"الباقات" (bundles)، وهو مبني على مفهوم تقسيم التطبيق إلى أجزاء قابلة لإعادة الاستخدام، ويُشجع على استخدام مكونات معمارية متكاملة لبناء تطبيقات مختلفة.

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

    بينما Laravel يهدف إلى توفير تجربة تطوير سريعة وسهلة، ويتبنى مفهوم "التعبيرات" (Expressions) ويقدم ميزات مثل نظام التوجيه (Routing) ومستوى عال من التطبيقات المشهورة والقائمة مسبقًا.

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

    وSymfony يقدم مجموعة كبيرة من المكتبات والمكونات الإضافية جاهزة للاستخدام مثل Doctrine للوصول إلى قواعد البيانات وTwig للقوالب.

    بينما Laravel يأتي بميزات مدمجة مثل Eloquent ORM للعمل مع قواعد البيانات وBlade للقوالب، وأيضًا هناك مكتبات إضافية وحزم جاهزة تمكنك من توسيع وظائف التطبيق بسهولة.

    وLaravel يُقدم أداءً جيدًا ومن الممكن تحسينه بشكل جيد أما Symfony فهو أفضل إذا كان لديك متطلبات أداء صارمة.

    • أعجبني 1
  5. بتاريخ 7 ساعة قال محمد خير مطيع زين العابدين:

    لم افهم هل قصدك ان المدة لانهائية واستطيع التقدم للامتحان في اي وقت في حياتي 

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

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

    • أعجبني 1
  6. Agile هي منهجية لإدارة المشاريع تركز على التسليم السريع للمنتج أو الخدمة من خلال سلسلة من الدورات القصيرة، والتي تسمى "sprint"، ويركز النهج المرن على المرونة والتكيف مع التغييرات، ومشاركة العملاء في العملية، والتركيز على القيمة.

    بينما Scrum هو إطار عمل لتطوير البرمجيات يعتمد على منهجية Agile، ويحدد Scrum مجموعة من الأدوار والمسؤوليات والفعاليات التي تساعد فرق تطوير البرمجيات على العمل بفعالية.

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

    وإليك بعض الأشياء التي تحتاج إلى معرفتها عن Agile و Scrum:

    قيم Agile الأساسية: تستند Agile إلى أربع قيم أساسية:

    1.  يهتم Agile بالأفراد الذين يعملون على المشروع، وليس بالعمليات أو الأدوات.
    2. التركيز على إنشاء منتجات وخدمات ذات قيمة للعملاء، وليس على اتباع العمليات.
    3.  التعاون والتواصل بين جميع أصحاب المصلحة في المشروع.
    4.  التحسين المستمر للمنتجات والخدمات والعمليات.

    يحدد Scrum ثلاثة أدوار أساسية:

    • يمثل مالك المنتج احتياجات العملاء ويحدد متطلبات المنتج.
    • يتكون فريق Scrum من مجموعة من الأشخاص الذين يعملون على تطوير المنتج.
    • يساعد مسؤول Scrum فريق Scrum على العمل بفعالية ويتأكد من اتباع Scrum.

    يحدد Scrum عدة فعاليات تحدث بشكل منتظم خلال عملية تطوير المنتج، بما في ذلك:

    • يجتمع فريق Scrum لتحديد العمل الذي سيتم تنفيذه في Sprint القادم.
    •  يجتمع الفريق يوميًا لمناقشة التقدم المحرز وتحديد أي عوائق.
    •  يعرض الفريق العمل الذي تم الانتهاء منه في Sprint الأخير للعملاء وأصحاب المصلحة.
    •  يلتقي الفريق في نهاية Sprint لمراجعة التقدم المحرز وتحديد أي عوائق.
  7. لديك مشكلة في استخدام دالة print() حيث تم وضع print() داخل الحلقة الداخلية for j in range(0, i +1)، مما يجعلها تقوم بالطباعة في كل دورة داخل الحلقة الخارجية for i in range(0,4).

    وعليك وضع print() خارج الحلقة الداخلية لتتم الطباعة بعد انتهاء الحلقة الداخلية، وبالتالي طباعة الأرقام بشكل صحيح وفقًا للشكل الهرمي المطلوب.

    ويمكن كتابة الكود بشكل أفضل من خلال استخدام متغير rows لتحديد عدد الصفوف المطلوبة في الهرم، مما يجعل من السهل تغيير عدد الصفوف إذا كنت بحاجة إلى ذلك، كما يقلل من استخدام الأرقام السحرية (مثل العدد 4 في range(4))، مما يجعله أكثر قابلية للصيانة والتعديل.

    num = 1
    rows = 4
    
    for i in range(rows):
        for j in range(i + 1):
            print(num, end=' ')
            num += 1
        print()

     

  8. بتاريخ 49 دقائق مضت قال إيلاف صالح الحارثي:

    تمام بس ليش يطلع لي شاشه رماديه لو عرفت اشيلها بتنحل المشكله تطلع كل مره اسوي رن للكود

    حاول الضغط على زر التشغيل الأزرق بجانب كلمة paused in debugger وكما أخبرتك يجب تعطيل الـ Debugging في الكود لديك هل قمت بذلك في الكود أو من خلال vscode؟

  9. قمت بإنشاء مشروع لك بالكود الصحيح، وربط ملف السكريبت بملف HTML بشكل صحيح أيضًا، ومن المفترض عند فتح الملف في المتصفح أن يظهر لك رسالة HeyThere!، المشروع في المرفقات.

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

    test.rar

  10. المشكلة هي أنك قمت بتفعيل وضع الـ Debugging عليك بتعطيل ذلك في محرر الأكواد vscode من خلال الضغط على SHIFT + F5 أو من خلال المتصفح إذا قمت بتفعيل ذلك.

    أما إذا قمت بتغيير شكل عرض الكونسول فيمكنك تعديل ذلك من خلال الثلاث نقاط بجانب علامة الترس كالتالي:

    Snag_37770c5c.thumb.png.bc6cc335a4f58458eb93246fdf210a83.png

  11. بتاريخ On 3‏/9‏/2023 at 19:10 قال Anas Orfaly:

    المقصد هو اني بخلص درس "الى عالم الويب" قبل الانتقال الى دورة "تطوير واجهات المستخدم" لكن بعد درس "الى عالم الويب" يتوفر درس "البرمجة كائنية التوجه" وهي مختصة في مجال بايثون وانا لا اريد تعلم بايثون حاليا فهل يأثر سلبيا علي ان انتقلت الى دورة "تطوير واجهات المستخدم" بعد ان انتهي من درس "الى عالم الويب" ؟

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

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

    • أعجبني 2
  12. السؤال عام، ما الذي تريد تنفيذه؟ فلكل لغة مميزات خاصة وبالتالي بعض اللغات أفضل في مجالات معينة من مجالات أخرى مثلاً الجافاسكريبت هي لغة برمجة لمواقع الويب بالأساس بينما بايثون أفضل في التعامل مع البيانات والتعلم الآلي والأمر يعتمد على المشروع وحجمه ونوعية البيانات وحجمها، حيث هناك مشاريع يتم بها استخدام جافاسكريبت في الواجهة الأمامية وبايثون للواجهة الخلفية.

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

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

    وكأي لغة برمجة تستطيع التعامل مع السيرفرات والأمور المتعلقة بها.

    وعلى ما أظن أنك تريد تطوير الواجهة الخلفية لأنك ذكرت PHP، وبالطبع تستطيع ذلك من خلال بايثون، وهناك إطارات ستساعدك في تلك المهمة مثل Django و Flask و Pyramid في حال كنت تريد التطوير للويب.

    ولكن إن كنت تريد العمل على مشاريع خاصة بووردبريس أو لارافيل فهنا عليك تعلم PHP وليس بايثون.

    • شكرًا 1
  13. بتاريخ On 4‏/9‏/2023 at 06:00 قال مضحي Modhy:

    @Adnane Kadri

    اخي انا اعمل على Lightsail من امازون كيف يمكن الاستفادة مما قلته ؟

    وإن كانت الطريقة كما قلتها بالأول فكيف اسمح فقط للتطبيق بالوصول لها ؟

    واشكرك على تفاعلك بالموضوع.

    عليك بإنشاء متغيرات البيئة على الاستضافة كالتالي:

    1. انتقل إلى لوحة معلومات Lightsail.
    2. انقر على اسم مثيل Lightsail الخاص بك.
    3. انقر على الإعدادات.
    4. في قسم المتغيرات، انقر على إضافة متغير.
    5. أدخل اسم المتغير وقيمة المفتاح أو كلمة السر.
    6. انقر على حفظ.

    أو يمكنك فعل ذلك أثناء عمل deploy لمشروعك كالتالي:

    Snag_372c3666.thumb.png.4dddd078d8f16282424b5a3683217437.png

    بمجرد إنشاء متغيرات البيئة، تستطيع الوصول إليها من خلال متغيرات البيئة، ومثلاً إن قمت بإنشاء متغير بيئة يسمى SECRET_KEY وقيمة المفتاح أو كلمة السر هي my-secret-key، فبإمكانك الوصول إلى المفتاح أو كلمة السر عن طريق استخدام الكود التالي:

    import os
    
    SECRET_KEY = os.environ["SECRET_KEY"]

    وبالإضافة إلى الطريقة السابقة بإمكانك إضافة ملف .env والوصول لمتغيرات البيئة الخاصة به كما تفعل في مشروعك.

    • أعجبني 1
  14. لا يوجد وقت معين للإنتهاء من الدورة فهي متاحة لك مدى الحياة، وأيضًا بإمكانك دخول الإمتحان أكثر من مرة لحين إجتيازه لكن من الأفضل الاستعداد لكي تجتازه من المرة الأولى حفاظًا على وقتك وجهدك.

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

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

     

    • أعجبني 1
    1. أولاً عليك تضمين المكتبة iostream في بداية البرنامج لاستخدام الكائنات cin و cout.
    2. في كل عبارة cout ، يجب أن تستخدم العلامة التنقيطية النقطة والفاصلة المنقوطة (;) بعد الإخراج.
    3. يجب أن تتحقق من أن قيمة المتغير b ليست تساوي الصفر عند استخدام العملية القسمة لتجنب القسمة على صفر.

    والكود الصحيح هو:

    #include <iostream>
    
    using namespace std;
    
    int main() {
        int a, b;
        char s;
    
        cin >> a >> s >> b;
    
        if (s == '+') {
            cout << (a + b);
        }
        else if (s == '-') {
            cout << (a - b);
        }
        else if (s == '*') {
            cout << (a * b);
        }
        else if (s == '/') {
            if (b != 0) {
                cout << (a / static_cast<double>(b));
            } else {
                cout << "Error: Division by zero is not allowed.";
            }
        }
        else {
            cout << "Error: Invalid operation.";
        }
    
        return 0;
    }

    حاولي كتابة 3+5 مثلاً وستحصلي على ناتج 8.

  15. السبب قد يعود إلى أنك تستخدم إصدارات مخلفة من بايثون لديك مثل بايثون 3.10 و بايثون 3.11 وبالتالي في منفذ الأوامر لديك الإصدار الأساسي هو 3.11 مثلاً ويتم تثبيت المكتبات به.

    لكن في محرر الأكواد PyCharm قد يكون الإصدار الخاص بمترجم بايثون Python Interpreter هو  3.10 وبالتالي لا يتم العثور على المكتبات التي تم تثبيتها في الإصدار 3.11.

    لذلك عليك بتحديد إصدار مترجم بايثون الصحيح وذلك بفتح مشروع ثم بالأسفل ستجد الإصدار الذي تم إختياره وبالضغط عليه تستطيع تغييره:

    py_python_interpreter_widget_dark.thumb.png.3e2cc51aa71f40aa9eeb518d5e9f75be.pngلكن لا أنصحك بذلك، من الأفضل استخدام بيئة إفتراضية لكل مشروع وتثبيت المكتبات الخاصة بالمشروع في تلك البيئة الإفتراضية حتى لا يحديث تعارض بين إصدارات المكتبات عند تثبيتها بشكل عالمي أو تحدث مثل تلك المشكلة وعدم العثور على المكتبات.

    وبالطبع يتم إنشاء البيئة الإفتراضية من خلال pipenv أو وحدة venv وتستطيع معرفة ذلك هنا:

     

    • أعجبني 1
  16. تلك طريقة شائعة في جافاسكريبت من أجل تنفيذ Type Coercion (التحويل التلقائي للأنواع) في جافاسكريبت عند استخدام العلامة "+" لتحويل القيمة من نص إلى عدد، وذلك السلوك يعرف أيضًا باسم "تحويل النص إلى عدد" (String to Number Conversion) وهو نوع من التحويلات الضمنية (Implicit Conversions) التي تقوم بها جافاسكريبت تلقائيًا.

    مثال في الكود التالي:

    const textNumber = "123";
    const number = +textNumber; 
    console.log(typeof number) //number

    سيتم تحويل النص إلى رقم وستجد أن نوع المتغير number قد أصبح رقم بدلاً من نص.

    لكن حاول إضافة حرف a مثلاً ليصبح a123 ستجد أن النوع أصبح NaN لأنه في حال لم يكن الرقم صالح سيصبح من نوع NaN.

    لذلك في حال كنت تتوقع وجود أي قيمة غير رقمية مثل وجود حروف، فعليك بكتابة منطق في الكود للتحقق من ذلك.

    وأيضًا هناك دوال لعملية التحويل الرقمية مثل:

    • parseInt() تحول النص إلى عدد صحيح وتقوم بقراءة الأرقام من بداية النص حتى تصل إلى حرف غير رقمي وتتوقف.
    • parseFloat() تحول النص إلى عدد عشري وتقرأ الأرقام بدءًا من بداية النص حتى تصل إلى النقطة العشرية أو الحرف الغير رقمي.
  17. الدوال التي في الصورة هي دوال مجهولة أي بدون اسم وتم حفظها في متفير وتلك الطريقة تعرف باسم  function expression أو تعبير الدالة بالعربية، وهي طريقة لإنشاء دالة  عن طريق تخزين دالة في متغير، وهذا المتغير يمكن استخدامه لاحقًا لاستدعاء الدالة، ويمكن استخدام تعبير الدالة لإنشاء دوال مجهولة (anonymous functions) أو لتخزين الدوال في متغيرات.

    وإليك مثال على كيفية استخدام تعبير الدالة باستخدام الدالة السهمية (Arrow Function):

    // تعبير الدالة باستخدام الدالة السهمية (Arrow Function)
    const add = (x, y) => {
      return x + y;
    };
    
    //   استدعاء التعبير وتخزين القيمة في متغير
    const result = add(5, 3);
    console.log(result); // سيتم طباعة الناتج 8
    
    // يمكن استدعاء الدالة مباشرًة
    
    console.log( add(5, 3)); // 8

    وفي الكود لديك يتم تمرير المعامل message في كلٌ من دالتي sendMessage و onNewMessage.

    وبالطبع الدالة مجهولة لأن  الدالة ليس لديها اسم محدد بل تم تحديد المعاملات فقط مثل message و x  و y.

  18. بتاريخ 34 دقائق مضت قال Roog Roog:

    function multiplier(2) { return twice(5) => 5 * 2; }

    هيك بتقصد ؟

    ممكن كتابة الدالة twice(5) وطريقة عملا ، يعني ما يجري خلف الكواليس ، بعد اضافة التابع والعدد للدالة ، وشكرا .

    انا بصراحة ما عم افهم كيف العدد خمسة بالدالة twice(5) اخد مطرح number بالدالة المعادة في دالة multiplier (factor).

    شكرا

    الكود يعتمد على ميزة في جافاسكريبت تسمى إغلاق (Closure) والتي تسمح لدوال داخلية بالوصول إلى المتغيرات الخارجية من الدالة التي تم إنشاؤها. 

    تم إنشاء دالة multiplier التي تستقبل معامل (factor)، وتلك هذه الدالة تُعيد دالة أخرى (دالة مجهولة) تقوم بضرب العدد الذي تم تمريره إليها بالعامل (factor).

    ثم تم تعريف متغير twice وتعيينه بنتيجة استدعاء دالة multiplier مع المعامل 2، مما يعني أن twice سيحتوي على الدالة الناتجة من استدعاء multiplier(2).

    هنا الكود يصبح كالتالي:

    function multiplier(factor) {
     return number => number * factor;
    }
    let twice = multiplier(2);
    console.log(twice); // number => number * factor
    

    لاحظ عند طباعة المتغير أعاد إلينا دالة.

    وعندما نقوم بكتابة twice(5)، نقوم  باستدعاء الدالة الناتجة من multiplier(2) مع العدد 5 كمدخل، وبالتالي factor سيكون 2 (لأنه تم تمريره عند إنشاء twice)، وnumber سيكون 5 (لأنه تم تمريره عند استدعاء twice(5)).

    الدالة الداخلية ستقوم بضرب number (الذي هو 5) في factor (الذي هو 2)، مما ينتج عنه القيمة 10.

    القيمة المُرجعة من twice(5) هي 10، وهذا هو السبب في أن console.log(twice(5)) يعرض 10 في الإخراج.

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

    • شكرًا 1
  19. بتاريخ 2 دقائق مضت قال Ridouan Moufaddal:

    لقد غيرت dns بدون جدوى 

    حاول تجربة استخدام vpn مجاني أثناء تثبيت الإضافة، أيضًا جرب إعادة تشغيل الراوتر الخاص بك، أو إعادة تثبيت vscode من جديد بعد حذفه وتحميل أخر إصدار.

    وفي حال تعذر ذلك، حاول تثبيت ملف الإضافة من خلال الضغط على اسم الإضافة عند البحث عنها كالتالي:

    Snag_2d6b5588.thumb.png.f41311f6c802e67181811cbfd1b452fe.png

    وسيتم فتح صفحة الإضافة على متجر vscode ابحث عن Download Extension ثم اضغط عليه لتحميل ملف الإَضافة وهو بصيغة vsix كالتالي:

    Snag_2d6c802d.thumb.png.7070f8fe6deb7408ea1ef0a3a5bd2ce7.png

    بعد ذلك توجه لـ vscode ثم اضغط على خيار الإضافات ثم اضغط على الثلاث نقاط واختر منها  install from VSIX ثم اختر الملف الذي قمت بتحميله الخاص بالإضافة:

    Snag_2d6e6681.thumb.png.e90938b98c547af1072c0a04b7c3be90.png

  20. بتاريخ 9 دقائق مضت قال Farah Mahmoud2:

    السلام عليكم ورحمه الله وبركاته+ كيف اطلع رقم عشوائي من اربع خانات وليس خانه واحده 

     

    وعليكم السلام،

    يمكنك استخدام مكتبة Python المدمجة random لإنشاء رقم عشوائي من أربعة خانات، حيث سنعتمد على وظيفة randrange() من مكتبة random لإنشاء رقم عشوائي بين 1000 و 9999 (من أربعة خانات)، كالتالي:

    import random
    
    # توليد رقم عشوائي من أربعة خانات
    random_number = random.randrange(1000, 10000)
    
    print("الرقم العشوائي من أربعة خانات هو:", random_number)

    عند تشغيل الكود، ستحصلين على رقم عشوائي يتراوح بين 1000 و 9999 بما في ذلك الحد الأدنى (1000) والحد الأقصى (9999)، وبإمكانك تغيير النطاق حسب احتياجاتك إذا كنت ترغبين في رقم عشوائي بنطاق معين.

    • أعجبني 1
  21. ما تريده أنت هو أن تصبح مطور واجهة خلفية Back-End من خلال لغة جافاسكريبت، وبالتالي عليك تعلم بيئة التشغيل node.js.

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

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

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

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

    بعد ذلك ستنتقل إلى تعلم node.js والمفاهيم المتعلقة بها وبالويب وبروتكولات HTTP ثم تعلم إطار express.js لتسهيل عملية تطوير الخادم بدلاً من كتابة كود node.js.

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

    • أعجبني 1
  22. ربما المشكلة لديك هي أنك قمت بوضع قيمة ثابتة لعرض الصورة في الشاشات الصغيرة، حيث حددت 8rem، حاول تغيير تلك القيمة لتصبح كالتالي:

    max-width: 100%

    وإذا لم يتم حل المشكلة من الأفضل ضغط مجلد المشروع وإرفاقه هنا لتفقد أين المشكلة.

×
×
  • أضف...