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

Mustafa Suleiman

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

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

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

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

    365

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

  1. المشكلة هي أنك لا تتحقق مما إذا كان المستخدم مسجلاً الدخول أم لا قبل محاولة إرسال طلب PUT إلى /api/images/like، وفي حال كان المستخدم غير مسجل الدخول، فستتلقى خطأ 401 (غير مصرح به). وعليك إضافة شرط إلى دالة likeImage للتحقق مما إذا كان المستخدم مسجلاً الدخول أم لا، وإن لم يكن المستخدم مسجلاً الدخول، فتستطيع توجيهه إلى صفحة تسجيل الدخول. const user = JSON.parse(localStorage.getItem('user')) || null; useEffect(() => { likeImage(); }, [like]); const likeImage = async () => { if (!user) { navigate('/login'); return; } await axios .put(`/api/images/like/${imageId}`, { headers: { "Content-Type": "application/json", "x-auth-token": user?.data?.token, }, }) .then((res) => { setLike(res?.data); }) .catch((err) => setError(err.response.data.msg)); };
  2. فائدة الكونسول تكمن أثناء تطوير المشروع، حيث تقوم بعرض نتيجة الكود مثل تتبع مخرجات الدوال في الكود مما يساعدك فهم كيفية عمل الدوال وكيفية تأثيرها على البيانات. أو عرض الاستجابة من الخادم والبيانات التي تم إرسالها أو البيانات المرسلة من الواجهة الأمامية إلى الخادم، أي مفيد في عملية الـ debugging فبدون عرض تلك البيانات لن تتمكن من فهم ما يحدث وسبب حدوث مشكلة معينة. أيضًا عرض رسائل الأخطاء التي يتم تمريرها كالتالي: try { // ... } catch (error) { console.log(error); }
  3. أرجو طرح الأسئلة المتعلقة بالدورة أسفل الفيديو في التعليقات، وطرح الأسئلة العامة هنا لمساعدتك بشكل أفضل. بخصوص التطبيق، فقد قمت بمجهود جيد أحسنت في ذلك، ولكن طريقة تحريك القطة بحاجة إلى تحسين، حيث أنه يحدث تدوير (دوران) للشخصية عند الضغط على الأسهم وليس توجيهها نحو اليمين واليسار والأعلى والأسفل، الأمر الذي يجعل من الصعب التحكم في الشخصية وأيضًا التخبط في جدران المتاهة عند الدوران. أي الفكرة عند الضغط على سهم معين يتم توجيه الشخصية في ذلك الإتجاه، وعند استمرار الضغط تتحرك الشخصية في ذلك الإتجاه. وهناك بعض الأمور الأخرى التي تم إضافتها من قبل المدرب في التطبيق العملي، يمكنك مشاهدة ما قام به بعد المحاولة بنفسك أنت في تحسين حركة الشخصية.
  4. وعليكم السلام محسن، تستطيع طرح الأسئلة العامة كما تشاء هنا في قسم أسئلة البرمجة وطرح الأسئلة المتعلق بالدورة أسفل فيديو الدورة. بخصوص سؤالك، بعد إتمام الدورة وإجتياز الإختبار والحصول على الشهادة سيتم توجيهك من أجل تحسين مهارات بما يتناسب مع سوق العمل وأيضًا خدمة كتابة السيرة الذاتية مجانًا. ولكن يجب توضيح أمر هام، بعض الدورات تعمل على تأهيلك في مجال البرمجة والمجال الخاص بالدورة من خلال شرح الأساسيات وتنفيذ المشاريع، لكن أنت بحاجة إلى تعلم مهارات أخرى بجانبها فمثلاً دورة تطوير واجهات المستخدم ستتعلم بها HTML, CSS, JS ومكتبة بوتستراب وJQuery لكن للعمل في شركة سيتعين عليك تعلم إطار خاصة بالواجهة الأمامية مثل Angualr أو مكتبة React التي يتم شرحها في دورة تطوير التطبيقات باستخدام لغة JavaScript في أكاديمية حسوب. لذلك عليك تفقد المهارات المطلوبة بالنسبة للمجال والوظيفة، ثم السعي نحو تعلم ما ينقصك من مهارات بجانب ما تم شرحه في الدورة، أي يجب عليك دائمًا التعمق أكثر وإنشاء المشاريع لتحسين مهاراتك بعد الإنتهاء من الدورة.
  5. وعليك السلام جهاد، في حال كانت البطاقة من نوع prepaid فسيتم رفضها، حيث يتم قبول البطاقات من نوع Debit وCredit فقط، وأيضًا متاح الدفع من خلال باي بال حاول ربط البطاقة بباي بال والدفع من خلاله. أيضًا من الممكن أن يشتري لك شخص ما بطاقة هدية بقيمة الدورة التي تريدها ثم استخدامها وسيتم إضافة الرصيد الخاص بقيمة البطاقة لحسابك، وستجد تفاصيل عن ذلك هنا: شراء بطاقة هدية استخدام بطاقة الهدية وفي حال تعذر الدفع من خلال الطرق السابقة، عليك التواصل مع مركز المساعدة في أكاديمية حسوب وإخبارهم بالتفاصيل وسيتم مساعدتك إن أمكن ذلك.
  6. طالما أنك تريد العمل الحر على مواقع العمل الحرب وهي مستقل وخمسات التابعة لحسوب، فعليك أولاً تعلم مهارة مطلوبة على تلك المنصات وقد تم توضيح الأمر بالتفصيل هنا: وبعد تحديد المجال الذي تريد التخصص به وإلقاء نظرة على المشاريع المعروضة، عليك وضع خطة دراسة من أجل تعلم المهارات المطلوبة لذلك المجال، والأمر بحاجة إلى 6 أشهر أو سنة أو ربما أكثر بناءًا على مجهودك وخبراتك السابقة. ويمكنك الإطلاع على التالي أيضًا: وعند الوصول لمرحلة التقديم على المشاريع، سيفيدك قراءة التالي:
  7. نستخدم نفس اللغات الأساسية للويب وهي HTML, CSS, JS بالنسبة للواجهة الأمامية في مواقع الويب الديناميكية (تطبيقات الويب) لكن لإنشاء تطبيق SPA نحن بحاجة إلى استخدام تقنية مثل مكتبة React أو إطارات مثلAngular أو Vue.js وهي مبنية باستخدام جافاسكريبت ونقوم من خلالها بإنشاء تطبيقات SPA بسهولة، فلو قمنا بذلك بمفردنا من خلال جافاسكريبت سيصبح الأمر معقد ويستغرق وقت أكثر. وبالطبع الواجهة الخلفية قد تختلف حيث هناك لغات مختلفة للواجهة الخلفية ولكل لغة إطار عمل، مثل PHP ولارافل أو جافاسكريبت وnode.js أو بايثون ودجانغو، ونستخدم اللغة والإطار بناءًا على نوع واحتياجات المشروع، ومن الممكن الجمع ما بين أكثر من لغة وإطار.
  8. السؤال متعلق بدورة علوم الحاسب أرجو التعليق أسفل فيديو الدورة في المرة القادمة لمساعدتك بشكل أفضل. وإن كنت قد فهمت سؤالك بشكل صحيح، فالفرق الرئيسي بين تطبيق الويب (web app) وموقع الويب (web site) هو أن تطبيق الويب يوفر تفاعل أكثر مع المستخدم، بينما موقع الويب هو مجموعة من الصفحات التي يمكن عرضها من خلال مستعرض الويب. وكأمثلة، موقع فيسبوك هو تطبيق ويب وليس موقع ويب، بينما المواقع الإخبارية أو Wikipedia مثلاً هي مواقع ويب، بمعنى أن تطبيقات الويب المحتوى بها متغير بناءًا على تفاعل المستخدم معها، وهي مواقع ديناميكية، أي محتواها يتغير بدون تدخل من مديري الموقع، فمثلاً أنتِ في أكاديمية حسوب تقومين بإنشاء حساب وتغيير صورتك ونشر سؤال والتعليق ورفع ملفات وصور وخلافه. لكن الفرق بين أكاديمية حسوب وموقع فيسبوك هو أن فيسبوك عبارة SPA أي تطبيق من صفحة واحدة، بمعنى أنه يتم إنشاء محتوى الصفحة بالكامل في وقت واحد باستخدام لغة برمجة جافا سكريبت، وبالتالي المستخدم لا يحتاج إلى تحميل صفحة جديدة كلما قام بإجراء تغيير، مثل التفاعل مع منشور أو مشاركة صورة. وذلك النوع من تطبيقات الويب الديناميكية له مزايا فريدة مثل تحديث المحتوى بدون الحاجة إلى إعادة تحديث الصفحة وأيضًا القدرة على التنقل السريع ومزايا أخرى.
  9. الدورة متاحة لك مدى الحياة، وتستطيع التقدم للإمتحان في أي وقت وأيضًا أكثر من مرة في حال لم تجتازه من المرة الأولىولكن من الأفضل الاستعداد جيدًا، وكنصيحة قم بتحديدجدول زمني واقعي بالنسبة للوقت المتاح لك والتزم به ولا تترك الأمر بدون تخطيط.
  10. قم بالضغط على CTRL + SHIFT + J وستظهر لك نافذة أداة المطور، اضغط على تبويب Network ثم اضغط على disable cache أعد تحميل الصفحة وانظر إذا ما تم حل المشكلة، وأحيانًا قد تضطر إلى تسجيل الخروج ثم تسجيل الدخول مرة أخرى.
  11. الأمر طبيعي لأنك لا ترسل البيانات بالشكل المطلوب إلى قالب ejs، بل تقوم بإرسال الرد من الخادم على هيئة كائن، والطريقة الصحيحة لتمرير البيانات إلى القالب هي كالتالي: // في ملف التطبيق Express const express = require('express'); const app = express(); app.get('/', (req, res) => { const jsonData = { link: 'http://example.com' }; res.render('index.ejs', { data: jsonData }); }); في ملف القالب: <!-- في ملف قالب EJS (مثلاً index.ejs) --> <!DOCTYPE html> <html> <body> <a href="{{data.link}}">الرابط</a> </body> </html>
  12. السؤال غير واضح ما الذي تقوم بفعله وما هي اللغات المستخدمة في مشروعك وعلى الأغلب أنت تعمل على مشروع Flutter، ولكن علي أي حال لديك مشكلة CMake error: required package not found وهناك حزمة لا يتم العثور عليها ولكنك لم توفر رسالة الخطأ بالكامل، حاول تفقد أي حزمة وقم بالتالي من أجل تثبيت الحزمة: sudo apt-get install اسم الحزمة الناقصة وإذا استمرت المشكلة استخدام أمر مثل pkg-config --list-all لعرض الحزم المثبتة على نظامك، أيضًا قد يكون لديك إصدار قديم من CMake فحاول تحديث CMake إلى أحدث إصدار. وتحقق من ملف CMakeLists.txt في مشروعك وتأكد من أنه تم تكوينه بشكل صحيح للبحث عن الحزم اللازمة باستخدام PkgConfig والتحقق من السطر 25 في ملف CMakeLists.txt الذي يشير إلى الاستفسار عن الحزم.
  13. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، ولكن يمكنك إرشادك لخطوات الحل: السؤال الأول: استخدمي متغير لتخزين الاسم. استخدمي f-string لدمج اسمك مع السلسلة "Hello, [اسمك]!". استخدمي دالة الطباعة لعرض النص على الشاشة. السؤال الثاني: متغيرات لتخزين السنة، الشهر، واليوم. f-string لتنسيق التاريخ بشكل "YYYY-MM-DD". دالة الطباعة لعرض التاريخ المنسق. السؤال الثالث: إنشاء قائمة من الأرقام. f-string لحساب متوسط الأرقام في القائمة. دالة الطباعة لعرض المتوسط. السؤال الرابع: متغير لتخزين الاسم الكامل بالتنسيق "الاسم الأول الاسم الأخير". f-string لعكس الأسماء إلى التنسيق "الاسم الأخير، الاسم الأول". دالة الطباعة لعرض الاسمين بالتنسيق الجديد. السؤال الخامس: تعيين كلمة مرور محددة مسبقًا في متغير (مثل correct_password). حلقة تكرار لطلب من المستخدم إدخال كلمة مرور. قارني كلمة المرور المدخلة بالكلمة المرور المحددة. إذا تطابقت، اعرضي رسالة تأكيد، وإن لم تتطابق، اعرضي رسالة عدم التطابق واستمري في طلب إدخال كلمة المرور. السؤال السادس: إعداد متغير لتخزين المجموع. استخدمي حلقة تكرار (مثل while) لطلب من المستخدم إدخال أرقام واحدة في كل دورة. احتفظي بالإدخال كرقم وأضفه إلى المجموع. استمري في الطلب حتى يدخل المستخدم "stop". عند الانتهاء، استخدمي دالة الطباعة لعرض المجموع. السؤال السابع: استخدمي متغير للبدء من الرقم 10. حلقة تكرار (مثل while) لطباعة الأرقام من 10 إلى 1. في كل دورة، انقصي قيمة المتغير بواحد واستمري في الحلقة حتى يصبح الرقم 1. السؤال الثامن: متغير لتخزين الكلمة المدخلة. حلقة تكرار (مثل while) لطلب من المستخدم إدخال كلمة. دالة الطباعة لعرض الكلمة مرتين في كل دورة. استمري في الطلب حتى يقوم المستخدم بإدخال قيمة أخرى أو يتوقف عن الإدخال. السؤال التاسع: استخدمي حلقة تكرار (مثل while) لاستمرار في طلب إدخال المستخدم. دالة الإدخال لجلب إدخال المستخدم. افحصي الإدخال واعرضيه. استمري في الطلب حتى يدخل المستخدم "exit" أو إيقاف البرنامج بشكل آخر. ومن السهل تنفيذ ما سبق من خلال تعلم أساسيات بايثون في وقت قصير:
  14. ستحتاج إلى إنشاء الجداول التالية: 1- جدول المستخدمين يحتوي على معلومات عامة عن المستخدمين، مثل الاسم والهوية الوطنية والرقم الوظيفي والتاريخ الميلاد وموقع العمل والصورة الشخصية والبريد الإلكتروني وكلمة المرور. حقول الجدول: الحقل نوع البيانات اسم المستخدم - نص الهوية الوطنية - نص الرقم الوظيفي - نص تاريخ الميلاد - تاريخ موقع العمل - نص الصورة الشخصية - صورة البريد الإلكتروني - نص كلمة المرور - نص 2- جدول المناطق وذلك الجدول يحتوي على أسماء المناطق فقط. الحقول هي: اسم المنطقة - نص 3- جدول المحافظات ضع به أسماء المحافظات وأسماء المناطق التي تنتمي إليها. حقول الجدول: اسم المحافظة - نص اسم المنطقة - نص 4- جدول المجمعات السكنية هنا ضع أسماء المجمعات السكنية، وأسماء المحافظات التي تنتمي إليها، وعدد الوحدات السكنية، وأسماء الموظفين المسؤولين عنها. حقول الجدول: اسم المجمع السكني - نص اسم المحافظة - نص عدد الوحدات السكنية - عدد صحيح اسماء الموظفين المسؤلين عنه - نص 5- جدول الوحدات السكنية يتضمن أسماء الوحدات السكنية، وأسماء المجمعات السكنية التي تنتمي إليها، وكود الوحدات السكنية، وعدد الغرف، وأرقام العدادات الخاصة بالكهرباء والماء، وحالة الوحدة (مسكونة أو شاغرة). حقول الجدول: اسم المجمع السكني - نص كود الوحدة السكنية - نص عدد الغرف - عدد صحيح رقم العداد الخاص بالكهرباء - نص رقم العداد الخاص بالماء - نص حالة الوحدة - نص العلاقات المناسبة هي كما يلي: علاقة واحد لمتعدد One to Many بين جدول المستخدمين وجدول المجمعات السكنية، وتعني أنه يمكن لكل مستخدم أن يكون مسؤولاً عن العديد من المجمعات السكنية، ولكن يمكن أن يكون كل مجمع سكني مسؤولاً عن مستخدم واحد فقط. علاقة واحد لمتعدد One to Many بين جدول المجمعات السكنية وجدول الوحدات السكنية، وتعني أنه يمكن لكل مجمع سكني أن يحتوي على العديد من الوحدات السكنية، ولكن يمكن أن تكون كل وحدة سكنية جزءًا من مجمع سكني واحد فقط.
  15. لاحظ أنك تكتب view.engine والصحيح هو view engine كالتالي: app.set('view engine', 'ejs'); وإليك مثال كامل: import express from 'express'; const app = express(); // ✅ Configure EJS as your view engine app.set('view engine', 'ejs'); app.get('/', (req, res) => { res.render('home', { title: 'hsoub.com', message: 'Example message: hsoub.com', }); }); const port = 5000; app.listen(port, () => { console.log(`Example app listening on port ${port}`); });
  16. ما يجب أن يكون هو أن الباك اند مسؤول عن إصدار وتخزين التوكن لمراجعته عند إرسال الطلبات، حيث أنه هو المسؤول عن المصادقة وإصدار التوكنات، يجب أن يرسل الباك اند التوكن إلى الفرونت اند في استجابة لطلب تسجيل الدخول الناجح، ثم يمكن للفرونت اند بعد ذلك تخزين التوكن في ملفات تعريف الارتباط أو التخزين المحلي. ولكن إن تم تخزين التوكن في الفرونت اند، فسيتم فقده إذا قام المستخدم بحذف ملفات تعريف الارتباط أو التخزين المحلي. وبخصوص اختيار استخدام Breeze API أو الطريقة العادية في بناء الـ Backend، يعتمد ذلك على ما تريده، حيث Breeze API هو إطار عمل يساعد في تسهيل تطوير التطبيقات بلغة PHP باستخدام Laravel ولا مشكلة في استخدامه إن كنت تفضل بساطة التطوير واستخدام أفضل الممارسات الموصى بها من قبل Laravel، ولكن عند الحاجة إلى مزيد من التحكم في بنية وعمل باك اند، فمن الأفضل بناء الباك اند بالطريقة العادية. وبخصوص مشكلة تخزين التوكن: تأكد من أن الباك اند يقوم بإصدار التوكن بشكل صحيح عن طريق اختبار طلب تسجيل الدخول باستخدام أداة مثل Postman. ثم التحقق من أن الباك اند يرسل التوكن إلى الفرونت اند في استجابة لطلب تسجيل الدخول الناجح من خلال تسجيل استجابة الباك اند. ثم تفقد هل الفرونت اند يقوم بتخزين التوكن بشكل صحيح عن طريق فحص الكود الخاص بذلك.
  17. شكرًا لإقتراحك أحمد، سأقوم بتوصيله للفريق الخاص بإعداد الدورات في أكاديمية حسوب، وبالطبع تعلم مجال الأمن السيبراني أمر ممتع لكن بحاجة إلى جهد أكبر حيث ستحتاج إلى تعلم أمور مختلفة وليس تعلم البرمجة فقط، وستجد هنا تفصيل في حال أردت تعلم المجال:
  18. يوجد العديد من المكتبات الأخرى التي يمكن استخدامها في مجال الذكاء الاصطناعي، ومنها: PyTorch scikit-learn Keras Theano Caffe MXNet Chainer TorchVision وتختلف تلك المكتبات في ميزاتها وكيفية استخدامها، حيث أن TensorFlow هي مكتبة قوية مصممة خصيصًا للتعلم العميق، بينما scikit-learn هي مكتبة أكثر عمومية يمكن استخدامها لمجموعة متنوعة من تطبيقات التعلم الآلي.
  19. الشهادة معتمدة من قبل أكاديمية حسوب، ويجب تفهم أمر معين وهي أن الدورات عبر المنصات التعليمية يتم إصدار شهادة معتمدة من قبل المنصة ويمكن التأكد من إصدار الشهادة من خلال الكود الموجود فيها وأ]ضًا الرابط الإلكتروني الخاص بها في أكاديمية حسوب. وهي ليست شهادة جامعية ليتم إعتمادها من قبل أي دولة، بل شهادة من منصة عربية شهيرة في الوطن العربي، ولكن شهادات أكاديمية حسوب ليست شهادات إكمال أو حضور الدورة، بل يتم تقديمها لمن قام بإنهاء المشاريع ورفعها على منصة GitHub وإجتياز الإختبار النظري ثم إجتياز الإختبار العملي من خلال مشروع يتم إخبارك بتنفيذه ويتم مراجعته ثم تحصلين على الشهادة في حال تم تنفيذه بشكل صحيح وبجودة جيدة. وعامًة الشركات لن تنظر إلى الشهادات بغض النظر عمن قام بإصدارها، بل تنظر إلى الخبرة ومعرض الأعمال أي مهاراتك ومدى استيعابك هو الإثبات الوحيد لجدارتك. وستجدي تفصيل أكثر هنا في قسم الأسئلة الشائعة في الأكاديمية: ماذا يعني شهادة معتمدة من أكاديمية حسوب؟
  20. الفرق الرئيسي بين require() و import هو أن require() هو جزء من نظام الوحدات CommonJS ، بينما import هو جزء من نظام الوحدات ECMAScript بدءًا من ES6. ,نظام الوحدات CommonJS هو نظام الوحدات الأصلي لـ Node.js ,يسمح لك بتحميل وحدات من ملفات JavaScript منفصلة. وإليك مثال على التصدير باستخدام CommonJS // file: my-module.js module.exports = { name: "My Module", version: "1.0.0", sayHello: function() { return "Hello, world!"; }, }; لاستخدام تلك الوحدة ، نستخدم require() على النحو التالي: // file: my-app.js const myModule = require("my-module"); console.log(myModule.name); // My Module console.log(myModule.version); // 1.0.0 console.log(myModule.sayHello()); // Hello, world! ويؤدي استخدام نظام الوحدات CommonJS إلى بعض التداعيات ، مثل: يجب أن تكون جميع وحدات CommonJS محملة في وقت البدء. يمكن أن يؤدي تحميل وحدات متعددة إلى زيادة استخدام الذاكرة. لا يمكن تحميل وحدات CommonJS ديناميكيًا. ECMAScript أما نظام الوحدات ECMAScript هو نظام الوحدات الأحدث لـ JavaScript ,يسمح لك بتحميل وحدات من ملفات JavaScript منفصلة ، ولكنه يوفر أيضًا بعض الميزات الإضافية ، مثل: تحميل وحدات ديناميكيًا تحميل وحدات حسب الحاجة تحميل وحدات بشكل متوازٍ مثال على التصدير باستخدام نظام ECMAScript // file: my-module.js export const name = "My Module"; export const version = "1.0.0"; export function sayHello() { return "Hello, world!"; } لاستخدام تلك الوحدة ، نستخدم import على النحو التالي: // file: my-app.js import { name, version, sayHello } from "my-module"; console.log(name); // My Module console.log(version); // 1.0.0 console.log(sayHello()); // Hello, world! هل نستخدم require في objects و import في الدوال؟ من الأفضل استخدام import بدلاً من require(). وذلك لأن import يقدم ميزات أكثر وأفضل من require(). ولا يزال من الممكن استخدام require() في بعض الحالات ، مثل: إذا كنت تضطر إلى العمل مع كود قديم يستخدم require(). إذا كنت بحاجة إلى تحميل وحدات ديناميكيًا.
  21. يمكنك استخدام الواجهة الخلفية التي تم إنشائها بالفعل بواسطة PHP كأساس لتطبيق الهاتف، لكن فلاتر ليس لها علاقة بـ PHP أي سيتعين عليك تعلم لغة Dart الخاصة بذلك الإطار وأيضًا تعلم الإطار نفسه من أجل برمجة الواجهة الأمامية للتطبيق. وستجدي هنا شرح بخصوص تلك النقطة:
  22. سيتم التواصل معك بلا شك، وفي حال قمت بتقديم المشاريع الخاصة بك سيتم مراجعتها قبل التواصل لذلك الأمر بحاجة إلى بعض الوقت، في الوقت الحالي من الأفضل المراجعة بشكل جيد من أجل إجتياز الإمتحان من المرة الأولى.
  23. بالطبع أنت قادر على استخدام تنسيق النصوص (Formatting) في أي قيمة تُرجعها من دالة باستخدام توابع تنسيق السلاسل (String Formatting). وكمثال من خلال f-strings (formatted string literals) لتنسيق النصوص داخل العبارة التي ترجعها الدالة، حيث تبدأ السلسلة بحرف "f" قبل علامات الاقتباس، وتستطيع وضع متغيرات داخل السلسلة بين أقواس مربعة متعامدة. def greet(name): return f"Hello, {name}!" result = greet("Alice") print(result) # سيتم طباعة "Hello, Alice!" تستطيع أيضًا استخدام توابع تنسيق السلاسل مثل str.format() أو % لتنسيق النصوص داخل العبارة التي ترجعها الدالة كالتالي: def greet(name): return "Hello, {}!".format(name) result = greet("Bob") print(result) # سيتم طباعة "Hello, Bob!" أي أن الأمر حر بالنسبة لك، وتستطيع إرجاع أي قيمة تريدها.
  24. نصيحتي إليك هي ألا تشتت نفسك، طالما أنك بدأت مسار برمجي من الأفضل إنهاءه وإنشاء مشاريع ثم تعلم React أو Angular أو Vue.js وإنشاء مشاريع حقيقية أيضًا. بعد ذلك تستطيع العودة ودراسة الخوارزميات وهياكل البيانات وأنماط التصميم، ومن المفترض أنك ستقوم بدراسة الـ OOP من خلال جافاسكريبت أثناء دراستك لمسار الواجهة الأمامية، وإن لم تقم بالتعمق به خلال ذلك فعليك دراسة البرمجة الكائنية أيضًا. وللعلم تستطيع تأسيس نفسك من خلال أي لغة برمجة، لكن من حيث الأفضلية فلغة C++ أفضل وذلك لا يعني أن باقي اللغات سيئة بل يمكنك التعلم من خلال أي لغة، لكن من خلالها ستتعلم الأساسيات بدون تجريد وبشكل أقرب للنظام والعتاد، حيث أن اللغات الأخرى بها طبقات تجريد أي عمليات تحدث في الخلفية بدون علمك. ولكن تأسيسك من خلال C++ لا يعني أنك أصبحت ملم بلغة جافاسكريبت، بل عليك التعمق بها لأنها اللغة الأساسية لك كمطور واجهة أمامية أي عليك دراسة المفاهيم المتقدمة بعد دراسة الأساسيات في جافاسكريبت وليس الاكتفاء بالأساسيات فقط ونصيحتي هي التركيز على ذلك ثم الإنتقال لتعلم الخوارزميات وهياكل البيانات وأنماط التصميم.
  25. يمكنك الإعتماد على مستودعات المشاريع الخاصة بالدورة وستجديها في المقدمة أو المدخل الخاص بكل مسار أو مشروع. في حال قمتي بتطبيق نفس المشروع تستطيعي نسخه واستخدامه كمشروع لك، أو نسخ ما قمتي بتنفيذه بالفعل ثم إكمال ما تبقى، ولكن عليك الإنتباه إلى أنه عند التقدم للإختبار سيتم إختبارك وقياس مدى استيعابك لما قمتي بتنفيذه. ولتجنب تكرار الأمر، أرجو منك رفع المشاريع الخاصة بك إلى GitHub.
×
×
  • أضف...