لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 01/13/23 في كل الموقع
-
السلام عليكم عندي إستمارة كبيرة وداخلها استمارات صغيرة كما اني استخدم livewire واخزن البيانات على شكل مصفوفة ثم ارسلها لقاعدة البيانات الصورة توضح أكثر : يلزم أولا قبل ارسال الاستمارة الكبيرة تخزين الاستمارة الصغيرة لأني أحتاج منها المعرف لانها مربوطة بالاستمارة الكبيرة بعلاقة (واحد_لكثير) السؤال أريد حفظها وبعد الحفظ يتم إضافة نموذج آخر منها فارغ ليتم ربما ملئه هو الآخر شكرا لكم2 نقاط
-
لا يختلف اثنان على أهمية تعلم أساسيات البرمجة، فالبرمجة هي مهنة الحاضر والمستقبل، وهي تعتبر أحد المهارات الأساسية في عصرنا الذي بات يعتمد على التقانة في جميع جوانبه، فضلًا عن أن البرمجة قد أصبحت مادة أساسية في المناهج الدراسية في العديد من الدول بدءًا من المراحل الابتدائية. إذا اتخذت قررًا بتعلم أساسيات البرمجة من الصفر للاحتراف فهذا بلا شك قرار صائب، فالبرمجة توفر لك الكثير من فرص العمل، وتوسع مداركك، وتعزز تفكيرك النقدي، كما أنها تكسبك القدرة على حل المشكلات التي تواجهك بكفاءة أكبر، والأمر الجيد أن البرمجة تتميز عن غيرها من المجالات بكونها متاحة للجميع، ويمكنك تعلمها بشكل ذاتي بعيدًا عن أروقة الجامعات الطويلة. نشرح في مقال اليوم أساسيات البرمجة، ونستعرض أهم الأدوات التي تحتاجها كمبرمج، ونبين مفاهيم البرمجة الأساسية التي تشترك فيها معظم لغات البرمجة، وأهم المبادئ التي يمكنك اتباعها لتبرمج كالمحترفين. ما هي البرمجة؟ البرمجة باختصار هي إعطاء التعليمات لجهاز الحاسوب لينفذها باستخدام إحدى لغات البرمجة، ويتلقى الحاسوب هذه التعليمات ويترجمها ويفهمها وينفذها، ويُطلق على تسلسل التعليمات المكتوبة باستخدام لغة برمجة والتي تنجز مهمة محددة اسم برنامج. فنحن البشر نتواصل فيما بيننا بلغاتنا الطبيعية كالعربية أو الإنجليزية، أما الحاسوب فيحتاج لاستخدام لغة برمجة خاصة للتواصل معه، وعالم لغات البرمجة شامل ومنوع فهناك المئات من لغات البرمجة حاليًا، ونشير إلى أن لغة البرمجة هي لغة وسيطة بيننا وبين الحاسوب فحتى الحاسوب لا يفهم لغة البرمجة التي نكتبها بل تُحول كل لغة نكتبها إلى لغة يفهمها الحاسوب عبر أداة تحويل وتدعى اللغة التي يفهمها الحاسوب بلغة الآلة Machine Language التي تتكون من أصفار وواحدات. قبل أن تتعلم أساسيات البرمجة: حدد وجهتك قد تكون حددت لغة البرمجة التي تريد تعلمها وتبحث عن تعلم أساسيات هذه اللغة لذا وصلت إلى هنا، أو لم تحددها بعد، ولكن عمومًا تشترك كل لغات البرمجة بأساسيات واحدة إن تعلمتها سيسهل عليك التعامل مع أي لغة برمجة. قرار تعلم أساسيات البرمجة يشبه قرار الذهاب في إجازة، فأنت لن تذهب في إجازة دون أن تحدد الوجهة التي تريد الذهاب لها، وبناء على وجهتك تحدد مسارك الذي ستسلكه وتجهز مستلزماتك. وبالتالي السؤال الذي يجب أن تطرحه قبل أن تقرر تعلم أي لغة برمجة هو ما هو هدفي النهائي من تعلم البرمجة؟ وبناء على إجابتك تحدد مسار التعلم الصحيح واللغات والأدوات التي عليك تعلمها. ركز في البداية على لغة رئيسية واحدة تتعلم بها أساسيات البرمجة، ثم سيسهل عليك تعلم لغات أخرى حسب الضرورة، حيث الأساسيات والمفاهيم واحدة ولن تختلف من لغة إلى أخرى بل ما يختلف هو طريقة كتابة كل لغة والميزات التي توفرها للمبرمج، وبعبارة أخرى، الخطوة الصعبة هي الخطوة الأولى وهي خطوة تعلم أساسيات البرمجة. وتذكر أن تعلم البرمجة يحتاج لبعض الصبر والجهد، لا سيما عند تعلم إحدى لغات البرمجة لأول مرة كما أشرنا ويحتاج إلى تطبيق أيضًا لأن التعلم النظري شيء والتطبيق شيء آخر ففيه ستواجه الكثير من المشكلات وستتعلم بها حلها وتفاديها تدريجيًا حتى تكون مبرمجًا محترفًا. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن أهمية تعلم أساسيات البرمجة تعلم أساسيات البرمجة للمبتدئين يشبه إلى حد كبير تعلم قيادة السيارة، فعندما تجلس خلف مقود السيارة لأول مرة لن تكون قادرًا على القيادة بسلاسة على الفور، بالطبع! تذكَّر كيف تبدأ آنذاك باستكشاف أجزاء السيارة كالفرامل ودواسة البنزين وناقل الحركة، ثم التعرف على المفاهيم والمصطلحات الأساسية المرتبطة بالقيادة، وتلقي الكثير من التعليمات والملاحظات النظرية حول آلية القيادة أكثر من التركيز على القيادة بحد ذاتها. وبعدها تبدأ عملية التدريب على تنفيذ أوامر بسيطة مثل تشغيل السيارة وتحريكها رويدًا رويدًا في مكان مفتوح إلى أن تزداد التعليمات تعقيدًا وتصبح قادرًا على التحكم بالسيارة وقيادتها في كافة الظروف والطرق. بنفس الطريقة ستتعلم البرمجة، حيث عليك أن تتعلم بداية أساسيات البرمجة النظرية، ثم تكتب برامج باستخدام تعليمات بسيطة، ثم تتعلم كيف تكتب التعليمات بطريقة أكثر احترافية، ومع الممارسة والتطبيق ستتمكن من احتراف البرمجة وتطوير برامج متقدمة. وقد شرح مقال كيف تتعلم البرمجة: نصائح وأدوات لرحلتك في عالم البرمجة رحلة تعلم البرمجة بالتفصيل وقدم نصائح مهمة وأجاب على أسئلة شائعة حول تعلم البرمجة فارجع إليه للاستزدادة في هذا الموضوع. احصل على موقع إلكتروني مخصص لأعمالك أبهر زوارك بموقع احترافي ومميز بالاستعانة بأفضل خدمات تطوير وتحسين المواقع على خمسات أنشئ موقعك الآن أدوات مهمة لتعلم أساسيات البرمجة بعد أن تحدد اللغة التي ستتعلمها، تحتاج كخطوة أولى إلى إعداد بيئة التطوير لديك حتى تتمكن من كتابة شيفرة برمجية وتنفيذها كي تتواصل مع الحاسوب بتلك اللغة، والأدوات اللازمة لتعلم أساسيات البرمجة في البداية هي أداتين يحتاج إليهما كل مبرمج: محرر الشيفرة البرمجية أداة تحويل الشيفرة وتنفيذها محرر الشيفرة البرمجية تعتمد معظم لغات البرمجة على أوامر نصية، لذا ستحتاج إلى محرر أكواد لكتابتها، ومحرر الكود هو برنامج لتحرير النصوص مصمم خصيصًا لكتابة وتحرير الشيفرة المصدرية للبرامج، وتتميز بعض المحررات بأنها تتضمن ميزات تسهل كتابة الكود كتمييز الكلمات حسب بناء الجملة، ووضع مسافة بادئة لأسطر التعليمات البرمجية بشكل صحيح. ومن الأمثلة على محررات أكواد Notepad++ لنظام تشغيل ويندوز و gedit أو kate لنظام التشغيل لينكس. ملاحظة: بعض لغات البرمجة الموجهة للمبتدئين تعتمد على واجهات رسومية ولا تحتاج لمحررات نصية مثل لغة سكراتش والتي تدعى أحيانًا لغات برمجة رسومية، وللمزيد يمكنك الرجوع إلى مقال البرمجة باستخدام سكراتش. أداة تحويل الشيفرة وتنفيذها نكتب الكود المصدري عادة بلغة برمجة لا يفهمها جهاز الحاسوب مباشرة كما أشرنا، لذا يجب تثبيت برنامجًا يُحوِّل الشيفرة المصدرية للغة البرمجة بأكملها إلى لغة آلة Machine Code يفهمها الحاسوب ثم ينفذها، ويختلف هذا المُحول من لغة برمجة إلى أخرى ويُسمى إما مُصرِّف Compiler أو مُفسِّر Interpreter وبعض اللغات تحتاج إلى تصريف وآخر إلى تفسير وبعضها يحتاج إلى كلا العمليتين لتحويلها إلى لغة الآلة ثم تنفيذها. لتفهم الفرق بين المُصرِّف والمُفسِّر تخيل أن لديك وصفة مكتوبة باللغة التركية وأنت لا تعرف التركية وتريد أن تحضّرها. في هذه الحالة يمكن أن تطلب من أحدهم أن يترجم لك الوصفة بالكامل للغة العربية ويعطيها لك لتعدها متى ما أردت مستعينًا بهذه النسخة المترجمة Compiled، أو يمكنك أن تكلمه في كل مرة تريد فيها أن تحضر هذه الوصفة وتطلب منه أن يقرأها ويفسرها لك خطوة بخطوة Interpreted. بيئة التطوير المتكاملة IDE يمكنك أن تحصل على المحرر وأداة التحويل والتنفيذ على حدة وتثبتهما على جهازك، أو يمكنك بشكل بديل أن تعتمد على بيئة تطوير متكاملة IDE وهي اختصار العبارة Integrated Development Environment تتضمن كافة الأدوات اللازمة للتعامل مع لغة البرمجة. أمثلة على بيئات تطوير متكاملة: Microsoft Visual Studio NetBeans IntelliJ IDEA يمكنك في بيئة التطوير المتكاملة كتابة التعليمات البرمجية وتعديلها وتصحيحها وتحويلها ثم تنفيذها بسرعة وسهولة كل ذلك من مكان واحد، إذ توفر لك كافة الأدوات اللازمة لتكتب وتنفذ برامج بلغة معينة، كما توفر ميزات تساعدك في تطوير البرامج مثل تصحيح الأخطاء البرمجية، والإكمال التلقائي للتعليمات، وللتعرف أكثر على بيئة التطوير المتكاملة، يمكنك الرجوع إلى مقال مدخل إلى بيئة التطوير المتكاملة IDE. ملاحظة: يمكنك الاعتماد على مترجمات أو بيئات عمل برمجية متوفرة على الإنترنت، حيث توفر العديد من المنصات إمكانية كتابة وتنفيذ البرامج على متصفح الويب بدلًا من تثبيت وإعداد البرامج على الحاسوب المحلي. أساسيات البرمجة للمبتدئين تتنوع لغات البرمجة وتعدد استخداماتها إلا أنها تشترك في مجموعة من الأساسيات والمفاهيم، وتعلم هذه المفاهيم يمكّنك من التآلف من أي لغة برمجة، وإنجاز البرامج باستخدامها بمرونة أكبر، وأهم هذه الأساسيات: المتغيرات Variables الثوابت Constants أنواع البيانات Data types الكلمات المفتاحية Keywords التعليقات Comments بنى التحكم Control Structures الدوال Functions هياكل البيانات Data structure التكرار Iteration التعاود Recursion الكائنات Objects والأصناف Classes الوحدات Modules والمكتبات Libraries نشرح في الفقرات التالية كلًا من هذه الأساسيات البرمجية بمزيد من التفصيل، ونرفق بعض الأمثلة التوضيحية بلغات برمجة مختلفة. المتغيرات تستخدم المتغيرات Variables في البرمجة بشكل مشابه لاستخدامها في الرياضيات، فهي تخزن قيم البيانات من نوع محدد، ويمكن للمتغير احتواء قيمة واحدة في المرة الواحدة، فمتى ما وضعت فيه قيمة جديدة فإن القيمة السابقة المخزنة فيه سوف تحذف تلقائيًا. يمكن تشبيه المتغير بصندوق مفتوح في ذاكرة الحاسوب له اسم وعنوان خاص به، حيث يمكن إدخال القيم وإخراجها من هذا الصندوق حسب الطلب. وتسمى عملية وضع قيمة في المتغير بشكل مباشر الإدخال Input أو الإسناد Assignment أو أحيانًا الضبط Set، كما تسمى عملية الحصول على هذه القيمة وعرضها الإخراج Output أو الجلب Get. وتجدر الإشارة لأن بعض أنواع المتغيرات تكون محدودة الوصول، بمعنى أنها لا تسمح لك بالوصول المباشر لها سواء لتخزين البيانات ضمنها أو الحصول على القيم المخزنة فيها إلا عبر وسيط ويُسمى هذا الوسيط باسم ضابط setter وجالب getter على التوالي، والغرض من هذه العملية حماية المتغيرات من تعديلات غير مرغوبة كما سنوضح لاحقًا في فقرة الكائنات والأصناف التي أكثر ما تُستخدم فيها. لتعريف متغير في لغة البرمجة C++ عليك ذكر اسم المتغير ونوع البيانات التي تريد تخزينها في هذا المتغير وإسناد قيمة أولية فيه، على سبيل المثال لتعريف متغير باسم a لتخزين العدد الصحيح 10 بداخله نكتب ما يلي: int a = 10; كما يمكنك تعريف المتغير دون إسناد القيمة له في البداية وإسنادها لاحقًا بالشكل التالي: int a; a = 10; في حين لا تملك لغة بايثون أمرًا محددًا لتعريف المتغيرات، كل ما عليك هو كتابة اسم المتغير واستخدام علامة مساواة متبوعة بقيمة المتغير، وسوف تكتشف اللغة تلقائيًا نوع المتغير وحجم الذاكرة المناسب له كما يلي: a = 10 الثوابت تشير الثوابت Constants إلى قيمة أو كمية ثابتة لا نحتاج لأن نغيرها أو نعدلها أبدًا أثناء تنفيذ البرنامج، مثل سرعة الضوء، وعدد الدقائق في الساعة، والعدد Pi الذي يمثل نسبة محيط الدائرة إلى قطرها، وتسارع الجاذبية الأرضية، ومعدل نجاح الطالب وما إلى ذلك. فالثوابت البرمجية بمثابة صندوق تغلقه بإحكام بعد وضع قيمة فيه ولا يسمح لك بتغييرها في كود البرنامج، فبعد تحديد قيمة الثابت يسمح لك فقط بالوصول إلى قيمته، بخلاف المتغير الذي يمكنك الوصول إلى قيمته وإعادة تعيينها وتعديلها حسب حاجتك. لتعريف الثوابت في لغة C++ نستخدم الكلمة المفتاحية const ثم نكتب نوع البيانات واسم الثابت وقيمته كما يلي: const float PI = 3.14; const float GRAVITY = 9.8; const float SUCC_RATE = 0.5; في حين لا تميز بعض اللغات مثل لغة بايثون بين تعريف الثوابت والمتغيرات، حيث يمكنك تعريف الثوابت والتعامل معها كما تعرّف أي متغير، وتلتزم أنت بعدم تغيير قيمتها في سياق البرنامج، كما يمكنك التصريح الثوابت في ملف مختلف واستيرادها في برنامجك لتمييزها عن المتغيرات. PI = 3.14 GRAVITY = 9.8 ملاحظة: يشيع في أوساط المبرمجين تسمية الثوابت بحروف أجنبية كبيرة لتمييزها عن المتغيرات كما فعلنا في الأمثلة السابقة. أنواع البيانات أنواع البيانات Data types في لغات البرمجة هي عملية تحديد نوع وحجم القيمة التي يمكن أن تخزن في المتغير والتي يترتب عليها تحديد العمليات التي يمكن تطبيقها على هذه المتغير من طرف لغة البرمجة مثلًا السماح بتطبيق عملية الجمع والطرح على نوع الأعداد والسماح بعملية البحث والاستبدال على النصوص وهكذا. توفر لغات البرمجة العديد من أنواع البيانات مثل: الأعداد التي تنقسم إلى أعداد صحيحة integer numbers وأعداد عشرية floating point numbers، والمحارف Characters، والسلاسل النصية Strings، والقيم المنطقية Boolean …إلخ. على سبيل المثال في لغة البرمجة C++"" إذا كنت تحتاج في برنامجك إلى تخزين العمر، ستحتاج لمتغير من نوع بيانات عدد صحيح، ويمكنك تعريف هذا المتغير أو التصريح عنه باستعمال الكلمة المفتاحية int كما يلي: int age; فعندما استخدمنا الكلمة int هنا أخبرنا مترجم اللغة أن هذا المتغير مخصص لتخزين أعداد صحيحة فقط، ليحجز الحجم المناسب له في ذاكرة الحاسوب وينتظر منا إدخال قيم صحيحة فيه فقط، فإذا جربت تخزين نص أو عدد عشري فيه فستحصل على خطأ من أداة التحويل أثناء تحويل البرنامج إلى لغة الآلة وهذا ينطبق على الأمثلة الآتية أيضًا. وإذا احتجت لمتغير مخصص لتخزين قيمة عشرية مثل متوسط درجات الطالب، أو مساحة دائرة استخدم نوع البيانات float لهذا المتغير كما يلي: float avg; ولتعريف متغير مخصص لتخزين محارف مفردة يمكنك أن تستخدم نوع البيانات char كما يلي: char x; x = 'A'; أما لتخزين السلاسل النصية المكونة من عدة محارف فاستخدم نوع البيانات string كما يلي: string str = "This is a C++ string"; ولتخزين القيم المنطقية التي يمكنها أن تحتوي القيمة صواب true أو خطأ false والتي تفيد في اختبار الشروط، استخدم نوع البيانات bool كما يلي: bool con1 = false; bool con1 = true; إن التعامل مع أنواع البيانات أبسط في لغات أخرى مثل لغة بايثون، فأنت لا تحتاج لتحديد نوع بيانات للمتغير قبل استخدامه، لكون اللغة قادرة على استنباط وتعيين نوع بيانات المتغير تلقائيًا بمجرد أن تسند له قيمة ما، فبحسب نوع القيمة التي تسندها تحدد اللغة نوع البيانات المناسب له. إليك بعض الأمثلة على تعريف متغيرات من أنواع بيانات مختلفة في بايثون: v1 = "This is a Python string" #string v2 = 10 #int v3 = 10.33 #float v4 = True #bool لمزيد من المعلومات حول أنواع البيانات في لغات البرمجة، اطلع على مقال دليلك الشامل إلى أنواع البيانات. الكلمات المفتاحية تتضمن أي لغة برمجة مجموعة من الكلمات المفتاحية Keywords أو الكلمات المحجوزة Reserved Words، وهذه الكلمات لها معنى خاص ولا يمكن للمبرمج استخدامها لتعريف المتغيرات مثلًا. ولعلك انتبهت إلى قولنا كلمة مفتاحية على const وعلى int في الأمثلة السابقة في لغة C++ التي كانت كلمات محجوزة مخصصة لتعريف الثوابت البرمجية وأنواع البيانات، كما تعد الكلمتان True و False محجوزتين في بايثون لتمثيل القيمتين المنطقيتين صواب وخطأ على التوالي وقس على ذلك في أي لغة برمجة. وعليك أن تطلع على الكلمات المفتاحية ودلالة كل كلمة وطريقة استخدامها في اللغة التي تريد تعلمها ويكون عادة عددها محدود وبسيطة وقد تتكون من كلمة إنجليزية واضحة أو اختصار لها مثل الاختصار const لكلمة constants ثابت والاختصار init لكلمة integer عدد صحيح ومعرفة مما يتشكل الاختصار يُسهل عليك حفظ الكلمة خصوصًا وبما أن عددها محدود وبسيطة فلا تخف إن كانت لغتك الإنجليزية ضعيفة. التعليقات تعد التعليقات Comments من أساسيات البرمجة، والتعليقات هي عبارة عن نصوص وصفية تضاف للكود البرمجي لتسهيل فهمه وقراءته ويمكن أن تكون بأي لغة مثل اللغة العربية، وهي لا تنفذ في البرنامج حيث أن مترجم اللغة يتجاهلها ويعتبرها فراغات، لكنها مفيدة للمبرمج نفسه ليتذكر ما كتبه عند العودة للبرنامج لاحقًا، كما أنها تساعد أي شخص يقرأ الكود الذي كتبه المبرمج في فهم سير عمل البرنامج والهدف من كتابة تعليمات معينة فيه. تستخدم لغات البرمجة المختلفة أساليب مختلفة لكتابة التعليقات تنحصر عادة بالرموز الثلاثة # أو // أو /* */، على سبيل المثال في لغة C++ يمكنك كتابة التعليقات على سطر واحد بعد الرمز // وكتابة التعليقات متعددة الأسطر بين الرمزين /* */ كما يلي: /* هذا تعليق مكون من عدة أسطر */ //هذا تعليق مكون من سطر واحد أما في لغة بايثون فيمكنك كتابة التعليق أحادي السطر بعد الرمز # وكتابة التعليقات متعددة الأسطر بعد علامتي اقتباس أو ثلاث علامات اقتباس مفردة كما يلي: ''' هذا تعليق مكون من عدة أسطر ''' #هذا تعليق مكون من سطر واحد بنى التحكم تنفذ البرامج عادة بشكل متتابع من بداية الشيفرة إلى نهايتها تعليمة تلو الأخرى، لكن قد تحتاج في بعض الحالات لتغيير مسار التنفيذ وتجاوز بعض التعليمات أو تكرارها، وهنا يأتي دور بنى التحكم Control Structures التي تعتبر من أساسيات البرمجة لكونها تفيد المبرمجين في تحديد الاتجاه أو المسار الذي يجب الانتقال له بناء على عوامل معينة. بالعودة إلى مثال تعلم القيادة الذي ذكرناه بداية، تخيل أنك تسير في طريقك نحو مقر عملك، وصادفت إشارة حمراء أو اعترضتك سيارة إسعاف، ألن تحتاج عندها للتوقف لحين عودة الإشارة إلى اللون الأخضر أو التنحي لجانب الطريق لحين مرور الإسعاف ثم تتابع طريقك المعتاد. بنفس الطريقة تعمل بنى التحكم في الكود البرمجي، فهي تسمح للمبرمج بالتحكم في تدفق تنفيذ البرامج وفق حالات معينة، ومن أهم بنى التحكم البنى الشرطية if statement والبنى التكرارية loop statement. البنى الشرطية أما البنى الشرطية فتمكنك من اختبار شروط محددة قبل تنفيذ الكود البرمجي وتقوم بتنفيذه فقط عند تحقق هذه الشروط، مثلًا إذا كان لديك تعليمات برمجية تتضمن عملية قسمة، يمكنك اشتراط عدم تنفيذ هذه التعليمات عند محاولة القسمة على صفر. على سبيل المثال يقوم البرنامج التالي بلغة C++ بقسمة عددين عشريين ويختبر شرط القسمة على صفر: #include <iostream> using namespace std; int main() { float num1, num2, result; num1=18; num2=0; if (num2 == 0) { cout << "خطأ رياضي أنت تحاول القسمة على صفر"<<endl; } else { result=num1/num2; cout << "The result is "<< result << endl; } return 0; } تختبر التعليمة الشرطية if في الكود أعلاه إن كان المقسوم عليه num2 مساويًا للصفر (الذي يمكن أن يأتي من مواضع مختلفة مثل الطلب من المستخدم تزويدنا بقيمته)، وفي هذه الحالة تعرض العبارة "خطأ رياضي أنت تحاول القسمة على صفر" ولا تنفذ عملية القسمة num1/num2. الكود التالي كود مكافئ للكود السابق لكنه مكتوب بلغة بايثون: num1 = 18 num2 = 3 if num2 == 0: print("خطأ رياضي أنت تحاول القسمة على صفر") else: result = num1/num2 print(result) الأمثلة أعلاه كانت لشروط بسيطة، وستجد في لغات البرمجة أنواعًا عديدة من التعليمات الشرطية مثل if-else التي تمكنك من اختبار الشرط وعكسه، وتعليمة if المتداخلة التي تتضمن شرطًا فرعيًا داخل شرط رئيسي، وتعليمة switch التي تختبر شروط معتمدة على قيمة واحدة. كما ستتمكن من اختبار شروط مركبة من خلال المعاملات المنطقية مثل and و or و not. البنى التكرارية وأما البنى التكرارية أو حلقات التكرار فتمكنك من تكرار تنفيذ تعليمات معينة لعدد محدد أو مشروط من المرات، وتوفر على المبرمجين الكثير من الوقت في كتابة الكود. ستجد في أي لغة برمجة أنواعًا مختلفة من الحلقات مثل حلقات for التي تستخدم عندما تعرف عدد المرات التي تريد فيها تكرار التعليمات قبل التوقف، وحلقات while أو repeat التي تتشابه مع حلقات for لكنها تكرر مجموعة من التعليمات بعدد غير محدد من المرات يعتمد على استيفاء شرط معين. على سبيل المثال، إذا طلب منك أن تكتب برنامج لعرض ناتج ضرب العدد 5 بالأعداد من 1 إلى 10 فلا حاجة لأن تضرب العدد 5 في العدد 1 ثم في العدد 2 وهكذا وصولًا للعدد 10، يمكنك ببساطة كتابة حلقة تكرارية for كما في المثالين التاليين: حلقة for بلغة C++: int num=5; for (int i = 1; i < 11 ;i++) cout << num <<"X" << i << "="<< num*i << "\n"; حلقة for بلغة بايثون: num = 5 for i in range(1, 10): print(num, 'x', i, '=', num*i) الدوال الدوال Functions هي أجزاء مستقلة من الكود البرمجي لها اسم خاص بها وتشبه المصنع في عملها فتأخذ ممن يستخدمها دخلًا (إن وُجد) ثم تجري عمليات معالجة وتعيد إليه الناتج، ويدعى ما يُمرَّر إليها باسم المعاملات Parameters. تُكتب الدالة أو تعرّف مرة واحدة وتصبح بعدها قابلة لإعادة الاستخدام، حيث يمكن للمبرمج استدعاء أو مناداة الدالة في أي موضع في البرنامج مع تمرير قيم بيانات لها أو بدون، على سبيل المثال في حال أردت كتابة كود برمجي يعرض ناتج الضرب لعدد ما في الأعداد من 1 إلى 10 يمكنك تحويل الكود إلى دالة باسم displayMul وسيطها هو العدد المراد ضربه كما يلي: #include <iostream> using namespace std; // تعريف دالة لحساب نانج ضرب أي عدد في الأعداد من واحد لعشرة void displayMul(int num){ for (int i = 1; i < 11 ;i++) cout << num <<"X" << i << "="<< num*i << "\n"; } //استدعاء الدالة في البرنامج الرئيسي int main() { int num1 = 5; displayMul(num1); int num2 = 9; displayMul(num2); return 0; } عرفنا الدالة displayMul في المثال السابق بلغة C++ بكتابة نوع البيانات الذي تعيده الدالة وهو void أي لا شيء لأن الدالة تطبع القيمة ولا تعيد شيئًا، ثم اسمها ثم المعاملات الخاصة بها بين قوسين ()، ثم كتبنا التعليمات التي تقوم بها بين قوسين { }، ولاحظ أن الدالة لا تعيد شيئًا فلا يُشترط أن تأخذ أو تعيد شيئًا بل المهم أن تُنفِّذ عمليةً ما منوطة بها عند استدعائها. إليك أيضًا تعريف الدالة displayMul السابقة نفسها ولكن بلغة بايثون: def displayMul(num): for i in range(1, 10): print(num, 'x', i, '=', num*i) num = 5 displayMul(num) displayMul(9) ملاحظة: لا يمكنك استدعاء أو مناداة دالة في برنامجك إذا لم تقم بتعريفها أولًا، لأنك تحاول استخدام شيء غير موجود، لكن بعض الدوال تكون مضمنة ومعرفة مسبقًا في اللغة Built-in functions، ويمكنك استخدام هذه الدوال فورًا دون الحاجة لتعريفها بنفسك، على سبيل المثال الدالة "getline()"هي دالة جاهزة معرفة في لغة C++ تستخدم لإدخال السلاسل النصية من لوحة المفاتيح، والدالة print() هي دالة جاهزة في لغة بايثون تستخدم لطباعة قيم المتغيرات على الشاشة. هياكل البيانات هياكل البيانات Data Structures هي بنى برمجية مصممة لتضم مجموعة من البيانات أو المتغيرات، وقد تكون هياكل أولية كالأعداد الصحيحة والأعداد العشرية والمحارف كما شرحنا في أنواع البيانات، أو هياكل مركبة يمكن تشبيهها بمجموعة صناديق متلاصقة في ذاكرة الحاسوب باستطاعتها تخزين عناصر أو متغيرات متعددة من نفس نوع البيانات ويمكن لبعض هياكل البيانات أن تتضمن مزيجًا من أنواع بيانات مختلفة. فالمصفوفة Array، والقاموس Dictionary والكائن Object وغيرها أحد أنواع هياكل البيانات الشهيرة، على سبيل المثال يمكنك استخدام المصفوفات عندما تحتاج إلى تخزين مجموعة مكونة من عدة قيم لها نفس النوع في متغير واحد بدلًا من تخزين كل قيمة في متغير منفصل، ويمكنك بعدها تحديد أي عنصر من العناصر الموجودة في المصفوفة والوصول له من خلال موقعه أو فهرسه داخل هذه المصفوفة، وإليك مثال على تعريف مصفوفة لتخزين 5 أعداد صحيحة: في لغة C++: int marks[5] = {50,99,78,66,59}; في لغة بايثون: marks=[50,99,78,66,59] ملاحظة: قد تختلف أسماء هياكل البيانات من لغة برمجة إلى أخرى ففي لغة بايثون لا يُطلق عليها اسم مصفوفة array كما في لغة C++ بل اسم قائمة list حيث تختلف التسميات والمعنى واحد. هنالك العديد من هياكل البيانات التي لا يتسع المقال الحالي لذكرها، لذا ارجع إلى مقال هياكل البيانات لمزيد من التفاصيل. التكرار يعتبر مفهوم التكرار Iteration أحد أهم مفاهيم أساسيات البرمجة، وستحتاج له لاسيما عند التعامل مع هياكل بيانات مركبة في شيفراتك البرمجية مثل المصفوفات، فالتكرار يعني المرور على كل عنصر من عناصر البيانات المركبة على حدة وعلى التوالي لتنفيذ عملية أو مهام محددة عليه، وستجد أن التكرار صفة أيضًا تُسمى iterable تُطلق على أي متغير أو نوع بيانات يمكن المرور عليه وستراها غالبًا في التوثيقات. يمكنك تنفيذ التكرار في لغات البرمجة بطرق مختلفة، لكنه يعتمد بشكل أساسي على استخدام الحلقات التكرارية بأنواعها المختلفة، كما توفر بعض اللغات مكررات Iterators وهي عبارة عن دوال أو عمليات مخصصة تمكنك من المرور على جميع عناصر هياكل البيانات بطريقة منهجية وسهلة. على سبيل المثال للمرور عبر عناصر المصفوفة marks التي عرفناها في الفقرة السابقة وطباعتها في لغة C++ يمكن أن نكتب حلقة for مع استخدام متغير i يمثل تعدادًا نستخدمه كفهرس للوصول إلى كل عنصر من عناصر المصفوفة كما يلي: #include <iostream> using namespace std; int main () { int marks[5] = {50,99,78,66,59}; cout << "The marks are:"; for (int i = 0; i < 5; ++i) { cout << marks[i] << " "; } } أما في لغة بايثون يمكنك المرور عبر عناصر المصفوفة وطباعتها كما يلي: marks=[50,99,78,66,59] for m in marks: print(m) التعاود يعتبر التعاود Recursion أحد المفاهيم البرمجية الأساسية، وهو يعتمد على تقسيم المشكلات البرمجية إلى مشكلات أصغر يمكن حلها بسهولة، ويرتبط هذا المفهوم بالدوال البرمجية، حيث أن الدالة التي تكرر استدعاء نفسها حتى تصل لحالة حدية أو أساسية Base case تجعلها تتوقف عن عملية استدعاء نفسها وتعيد نتيجة معروفة عند هذه القيمة تعرف باسم الدالة التعاودية Recursive Function، وإذا لم تكن هناك حالة حدية تصل لها الدالة فهذا يعني أن الدالة ستكرر استدعاء نفسها إلى مالا نهاية. هذا الأسلوب البرمجي يصلح لحل المسائل التي تملك نمطًا هرميًا والتي يمكن حلها بسهولة عن طريق تحويلها لمسائل فرعية مشابهة أصغر. لكن في حال كان بإمكانك حل مسألة معينة عن طريق الحلقات التكرارية بسهولة فلا توجد ضرورة لاستخدام أسلوب التعاود في هذه الحالة، ولا تقلق إن لم تفهم شيئًا فقد أضفنا مثالًا مع مخطط يوضح لك المفهوم تاليًا. على سبيل المثال مسألة حساب عاملي أو مضروب عدد ما "n!" هي أشهر مسألة تعاودية بطبيعتها، فكما تعرف مضروب العدد 0 هو قيمة معروفة تساوي 1، وبالتالي يمكن اعتبار n=0 هو الحالة الحدية التي يمكن من خلالها حل مسألة المضروب لأي عدد بناء على القاعدة التالية: n! = n * (n - 1) عندما تبلغ قيمة العدد n=0 فسوف يعيد القيمة 1 للدالة وينتهي الاستدعاء المتكرر أو التعاودي لها. إليك مثال على إيجاد مضروب أو عاملي العدد n: بلغة C++: #include <iostream> using namespace std; int factorial(int n) { if (n < 0) { return 0; } else if (n == 0) { return 1; } else { return factorial(n - 1) * n; } } // استدعاء الدالة في البرنامج الرئيسي int main() { cout<< factorial(4); } بلغة بايثون: def factorial(n): if n < 0: return 0 elif n == 1: return 1 else: return n * factorial(n-1) print (factorial(4)) المخطط التالي يوضح طريقة استدعاء الدالة التعاودية وإعادتها للقيمة عند وصولها للحالة الحدية لا تقلق مرة أخرى إن لم تفهمه فهو من المفاهيم المعقدة والمرعبة للمبرمجين المبتدئين، وستفهمه تدريجيًا ولا يمكن أن يتضح بالكامل إلا إن طبقته وحتى رسمته على ورقة أو مخطط كما المخطط السابق. الكائنات والأصناف تعتبر الكائنات Objects والأصناف Classes أحد أساسيات البرمجة كائنية التوجه "OOP" حيث أن الكائنات تعتبر وحدات تتضمن مجموعة من المتغيرات ومجموعة الدوال البرمجية. والصنف Class هو بمثابة نموذج أو مخطط عام لتمثيل الكائنات، يمكن تعريفه واستخدامه لاشتقاق العديد من الأمثلة أو الحالات المختلفة من هذه الكائنات، ولهذا السبب يسمى الكائن نسخة من الصنف "instance". لنأخذ مثالًا من الواقع، يمكنك تعريف صنف يسمى Car لتمثيل السيارة، سيكون لهذه السيارة خصائص مختلفة تميزها كاللون والنوع والطراز وسنة التصنيع والسعر …إلخ. كما سيكون لها أفعال أو سلوكيات تقوم بها كفعل التشغيل وزيادة السرعة وتغيير الاتجاه والتوقف …إلخ. لذا نعرف صنفًا خاصًا يمثل السيارة ونشتق منه نسخ لسيارات مختلفة. برمجيًا يعرف الصنف بداخله متغيرات ودوال، وتحدد المتغيرات الخاصة بالصنف مميزات هذا الصنف بينما تحدد دوال الصنف "class functions" ما الذي يمكن للكائنات القيام به كما يحوي الصنف على دوال خاصة منها دالة تُدعى الدالة البانية "constructor" التي تُستدعى تلقائيًا عند إنشاء واستنساخ كائن من الصنف المُعرَّف ويمكن عبرها تمرير قيم تضبط الكائن الجديد الناتج مثلًا تضبط متغيراته وإليك مثال لتوضيح ذلك. على سبيل المثال، يمكن تعريف صنف يمثل هيكل دائرة، سنعرف لهذا الصنف متغير خاص به أو خاصية تمثل قيمة نصف قطر الدائرة، ودالة بناء تضبط قيمة نصف القطر أثناء إنشاء كل دائرة، ودالة لحساب مساحة الدائرة، ودالة أخرى لحساب محيط الدائرة يمكن استدعاءهما بعد إنشاء كل كائن من الصنف دائرة. المثال التالي يعرف صنف يمثل دائرة بلغة البرمجة C++ ويشتق نسختين أو كائنين مختلفين من هذا الصنف لكل كائن نصف قطر مختلف: #include<iostream> using namespace std; class Circle { const float PI = 3.14; // data members float radius; public: // contractor Circle(float radius) { this->radius = radius; } // member function float Area() { return radius*radius*PI; } float Perimeter() { return 2*radius*PI; } }; int main() { Circle circle1(3); cout << circle1.Area() << endl; cout << circle1.Perimeter() << endl; Circle circle2(4); cout << circle2.Area() << endl; cout << circle2.Perimeter() << endl; return 0; } والمثال المكافئ التالي بلغة بايثون يعرف صنف دائرة ويشتق كائنين منه: #تعريف صنف يمثل دائرة class Circle(): def __init__(self, radius): self.radius = radius def get_area(self): return (self.radius ** 2) * pi def get_perimeter(self): return self.radius * 2 * pi # إنشاء كائنات من الصنف Circle pi = 3.14 circle1 = Circle(3) print(circle1.get_area()) print(circle1.get_perimeter()) circle2 = Circle(4) print(circle2.get_area()) print(circle2.get_perimeter()) لا تقلق إن لم تفهم شيئًا مما سبق فمهوم الأصناف والكائنات مفهوم دسم معقد على المبتدئين، ولكن حاول إعادة قراءة الفقرة وتطبيق الأمثلة أو يمكنك تخطيه ببساطة فالمهم أنك تعرفت على المفهوم، أما إن أردت المزيد من التفاصيل، فارجع إلى مقال البرمجة كائنية التوجه من سلسلة تعلم البرمجة. الوحدات والمكتبات لعلك لاحظت عبارات تبدأ بالكلمة using أو include أو import في الأمثلة البرمجية السابقة وتساءلت عن أهمية وجودها! هذه العبارات ليست سوى أمثلة على استخدام وحدات ومكتبات جاهزة مختلفة في لغات البرمجة. تعتبر الوحدات Modules والمكتبات Libraries أحد مفاهيم أساسيات البرمجة التي من الضروري أن تعيها جيدًا، والهدف الأساسي من وجودها تسهيل كتابة التعليمات البرمجية وتمكين المبرمج من إعادة استخدامها دون الحاجة إلى كتابة التعليمات البرمجية الخاصة بها في الكود من جديد. فالمكتبات والوحدات توفر على المبرمجين إعادة اختراع العجلة وتمكنهم من التركيز على حل المشكلة بسهولة ومرونة أكبر. توفر كل لغة برمجة العديد من المكتبات التي تضم مجموعة من الدوال والأصناف والوحدات التي يمكنك استخدامها مرارًا وتكرارًا في التعليمات البرمجية الخاصة بك لأداء مجموعة من الوظائف المفيدة دون الحاجة لإنشائها من البداية، كما يمكنك تعريف الوحدات الخاصة بك. هناك العديد من الوحدات المضمنة في لغة بايثون مثلًا والتي يمكنك استيرادها بكتابة التعليمة import ولنضرب مثلًا باستيراد الوحدة math للاستفادة من الدوال الرياضية التي توفرها بالشكل التالي: import math print (math.sqrt(25)) print (math.pi) print (math.degrees(2)) print (math.radians(90)) print (math.sin(2)) print (math.cos(0.5)) إلى هنا نكون قد انتهينا من شرح أساسيات البرمجة للمبتدئين والتي تناولنا فيها أهم المفاهيم التي ستتعرف عليها بالتفصيل في أي لغة برمجية تنوي تعلمها قبل أن تتمكن من تطوير برامجك وتطبيقاتك بهذه اللغة. ونختم مقالنا بأهم النصائح والتوصيات التي تساعدك على تعلم هذه الأساسيات. 10 نصائح لتعلم أساسيات البرمجة إليك مجموعة نصائح سريعة تساعدك في رحلة تعلم البرمجة: حدد هدفك من تعلم البرمجة، ثم تعلم ما يلزمك من تقنيات لتحققه. لا تشتت نفسك بكثرة اللغات والتنقل بينها وركز على المفاهيم وطبقها بلغة واحدة بإتقان وتركيز. ضع خطة للتعلم والتزم بها دون تسويف. لا تضيع وقتك في البحث عن أفضل المصادر التعليمية والتنقل بينها بل اختر واحدًا فقط والتزم به للنهاية. طور مهارات البحث الفعال فهذا سيوفر عليك وقتًا كبيرًا ويساعدك في إيجاد حلول لمشاكلك البرمجية. رافق المجدين ومن يشاركونك الهدف والاهتمام نفسه فإن الصاحب ساحب كما يُقال. لا تتوقف عن التعلم وطور نفسك باستمرار. تحلَّ بالصبر والأناة فإن العلم بالتعلّم والحلم بالتحلّم. تقبل الفشل والخطأ فالفشل هو وسيلة للنجاح. طبق ثم طبق ثم طبق ما تتعلمه. الخلاصة تطرقنا في مقال اليوم لشرح أساسيات البرمجة للمبتدئين وتعرفنا على أهم المفاهيم البرمجية التي ستصادفك عند تعلم أي لغة من لغات البرمجة وذكرنا في الختام أهم الأسس والنصائح التي تساعد أي مبرمج لتعلم أساسيات البرمجة من الصفر حتى الاحتراف. قد لا تتمكن من هضم جميع المفاهيم مرة واحدة خصوصًا إن كنت مبتدئًا، لذا ارجع للمقال مرة ومرتين حتى تتأكد من استيعابك لتلك المفاهيم وضعه ضمن قائمتك المفضلة وطبق الأمثلة بلغة البرمجة التي تتعلمها أو تريد تعلمها. وإذا كان لديك أي تساؤلات حول أي شيء مر معك في المقال أو كنت قد بدأت فعلا بتعلم إحدى لغات البرمجة ولديك نصائح مفيدة تود أن توجهها للمبتدئين في تعلم البرمجة، نرحب بأن تشاركنا بها في التعليقات أسفل المقال. اقرأ أيضًا أسهل لغات البرمجة البرمجة كائنية التوجه دليلك الشامل إلى: برمجة التطبيقات فوائد تعلم البرمجة1 نقطة
-
بعد تحميل vue/cli حاولت إنشاء مشروع جديد فظهرت لي هذه الرسالة أثناء التحميل : 72 packages are looking for funding run `npm fund` for details � Invoking generators... � Installing additional dependencies... npm ERR! Invalid Version: npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\hp\AppData\Local\npm-cache\_logs\2023-01-13T18_15_37_398Z-debug-0.log ERROR Error: command failed: npm install --loglevel error --legacy-peer-deps Error: command failed: npm install --loglevel error --legacy-peer-deps at ChildProcess.<anonymous> (C:\Users\hp\AppData\Roaming\npm\node_modules\@vue\cli\lib\util\executeCommand.js:138:16) at ChildProcess.emit (node:events:513:28) at cp.emit (C:\Users\hp\AppData\Roaming\npm\node_modules\@vue\cli\node_modules\cross-spawn\lib\enoent.js:34:29) at maybeClose (node:internal/child_process:1091:16) at ChildProcess._handle.onexit (node:internal/child_process:302:5) علماً أنني قبله مباشرة حملت آخر تحديث لل npm ما المشكلة و ما الحل ؟1 نقطة
-
انهيت ثلاث مسارات في الدورة اساسيات تطوير الويب\بناء صفحات هبوط\تطوير متجر الاكتروني ، بعد ما انهيتهم لاحظت ان باقي المسارات مشتقه من النفس الفكرة للمسارات السابقة ، وانا انوي ان اخذ دوره مكثفه في الجافا سكربت والتشعب في بعض الامور الذي انوي اتطور فيها ، سؤالي هو هل انا علي ان اكمل باقي المسارات ام انه بامكاني تفاديها والتطور في ما احس اني ناقص فيه ثم القدوم لخوض الاختبار لاخذ شهادي من اكادميه حسوب؟1 نقطة
-
1 نقطة
-
حاول تنفيذ الأمر التالي وهو محاولة حذف ال cache ربما يحل المشكلة npm cache clean --force جرب حذف ال cache من خلال تنفيذ الأمر السابق ومحاولة تجربة بناء مشروع vue1 نقطة
-
1 نقطة
-
بالإضافة للطرق التي تم ذكرها في التعليقات السابقة يمكنك تنفيذ المثال الذي تريده من ال css عن طريق عدة طرق منها استخدام ال text-align يمكنك تنفيذ المثال السابق بسهولة كالتالي من خلال الوسم <p> ونضع له التنسيق p { text-align: center; } أو يمكنك استخدام ال القيم left و right يمكنك استخدام ال text-indent كالتالي <p id="p0">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p> ثم قم بإضافة التنسيق التالي #p0 { text-indent: 2em; } يمكنك استخدام القيم التي تريدها يمكنك استخدام ال Margins و Padding لذلك يمكنك تنفيذ المهمة التي تريدها من خلال الطريقة المناسبة لك1 نقطة
-
1 نقطة
-
1 نقطة
-
أحاول تحميل vue/cli بهذا الامر : npm install -g @vue/cli لكن هذا الخطأ يظهر لي دوما : npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated npm WARN deprecated subscriptions-transport-ws@0.11.0: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md npm ERR! code ERR_SOCKET_TIMEOUT pm ERR! network Socket timeout npm ERR! network This is a problem related to network connectivity. npm ERR! network In most cases you are behind a proxy or have bad network settings. npm ERR! network npm ERR! network If you are behind a proxy, please make sure that the npm ERR! network 'proxy' config is set properly. See: 'npm help config' npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\hp\AppData\Local\npm-cache\_logs\2023-01-13T14_00_02_889Z-debug-0.log لم أعرف حل المشكلة و لم أستطيع التحميل ...1 نقطة
-
الحمد لله تعالى , قبل أن أغلق الجهاز بلحظة ظهرت هذه الرسالة : C:\Users\hp\Desktop\cmder_mini\cmder_mini λ npm install --loglevel=error -g @vue/cli changed 852 packages in 11m 64 packages are looking for funding run `npm fund` for details C:\Users\hp\Desktop\cmder_mini\cmder_mini λ شكراَ لك , وفقك الله لكل خير1 نقطة
-
1 نقطة
-
جرب أن تقوم بأغلاق جهازك وجرب من جديد و أن ظهر لك نفس الخطاء جرب هذه الأوامر. npm config set fetch-retry-mintimeout 20000 npm config set fetch-retry-maxtimeout 1200001 نقطة
-
شبكة النت بطيئة لكن معظم البرامج تعمل , و حملت npm وحدثته خلالها دون مشاكل, هل يعني أن هذا البرنامج يحتاج نت سريع ؟ فلقد حاولت كثيرا دون فائدة1 نقطة
-
هذا الخطاء يقول أنك لديك مشكلة في شبكة الأنترنت تأكيد من أتصالك بالأنترنت وحاول مرة أخري1 نقطة
-
للأسف تكررت هذه الرسالة : npm ERR! code ERR_SOCKET_TIMEOUT npm ERR! network Socket timeout npm ERR! network This is a problem related to network connectivity. npm ERR! network In most cases you are behind a proxy or have bad network settings. npm ERR! network npm ERR! network If you are behind a proxy, please make sure that the npm ERR! network 'proxy' config is set properly. See: 'npm help config' npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\hp\AppData\Local\npm-cache\_logs\2023-01-13T14_43_29_527Z-debug-0.log1 نقطة
-
1 نقطة
-
1 نقطة
-
بغض النظر عن صعوبة التعامل مع مثل هكذا كم من البيانات من ناحية الواجهة الخلفية إلا ان العملية التي تصفها غير صديقة لتجربة الاستخدام. أظنك تريد بشكل ما اضافة خيار لاضافة اكثر من مالك في نفس الاستمارة. وفي مثل هذا ستحتاج في الغالب هيكلة هاته البيانات على شكل JSON لتنظيم طريقة التعامل معها من طرف الواجهة الامامية او الخلفية. اذ تكون قائمة الملاك هاته كمصفوفة داخل كائن الجيسون لدينا بالشكل التالي: { .. "owners":[ { "name" : "owner 1", "identity": "545789" }, { "name" : "owner 2", "identity": "978798" } ] } ثم ما ان اردنا اضافة مالك جديد الى قائمة الملاك اضفنا كائنا جديدا الى مصفوفة الكائنات. اذ سيكون من السهل آنذاك قراءة مصفوفة الكائنات والمرور على كل مالك من قبل الواجهة الخلفية وانشاء ملاك نقوم بنسبهم الى ذات العنصر. طبعا الفكرة نظرية بحتة، يمكنك تقويمها بحسب حاجتك او استعمالها وفق مثالك.1 نقطة
-
1 نقطة
-
السلام عليكم. عندي مشكل في كيفية استخدام الهوكس لتحديد كلاس معين. في المثال التالي <ul className = "navbar-links active-navbar"> الكود يعمل بشكل جيد. أما في حالة الهوكس لم يقع التعرف على الكلاس رغم ظهورها في الكونسل const [nav, setNav] = useState('.navbar-links') const animateNav = () => { nav === '.navbar-links' ? setNav('.navbar-links .active-navbar') : setNav('.navbar-links') } ************************* <ul className = {nav}> شكرا على المساعدة.1 نقطة
-
المشكلة انك اضفت النقطة قبل اسم الكلاس، ولكننا كما تعلم لا نضيف نقطة لاسم الكلاس في الـ html . جرب اضافة اسم الكلاس بدون نقطة وحاول مرة ثانية : const animateNav = () => { nav === 'navbar-links' ? setNav('navbar-links active-navbar') : setNav('navbar-links') }1 نقطة
-
بالنسبة لكلمة Characters أو اختصارًا Char فهي تترجم محارف وليس حروف لأن كلمة حروف Letters تقتصر على الحروف الأبجدية Alphabet مثل A B C بينما كلمة محارف تشمل كافة الرموز Symbols بما فيها الحروف الأبجدية والرموز الخاصة مثل % $ # * & ...إلخ. char c; c = '%';1 نقطة
-
يوجد العديد من الثغرات التي يجب الإهتمام بها من جانب مطورو الواجهات الخلفية لتقليل فرص تعرض الموقع أو البيانات للخطر وحسب OWASP و هو منظمة دولية غير ربحية مكرسة لأمن تطبيقات الويب . أحد المبادئ الأساسية لـ OWASP هو أن تكون جميع موادها متاحة مجانًا ويمكن الوصول إليها بسهولة على موقع الويب الخاص بها ، مما يتيح لأي شخص تحسين أمان تطبيق الويب الخاص به. تشمل المواد التي يقدمونها الوثائق والأدوات ومقاطع الفيديو والمنتديات. ربما يكون مشروعهم الأكثر شهرة هو OWASP Top 10. وهذا المشروع يتضمن الكثير من المعلومات حول ال 10 ثغرات الأكثر خطراً 1. الحقن Injection 2. المصادقة المعطلة Broken Authentication 3. التعرض للبيانات الحساسة Sensitive Data Exposure 4. XML External Entities (XEE) 5. كسر التحكم في الوصول Broken Access Control 6. خطأ في التكوين الأمني Security Misconfiguration 7. البرمجة النصية عبر المواقع Cross-Site Scripting 8. إزالة التسلسل غير الآمن Insecure Deserialization 9. استخدام المكونات مع الثغرات المعروفة Using Components With Known Vulnerabilities 10. Insufficient Logging And Monitoring لإلقاء نظرة أكثر تقنية ومتعمقة على OWASP Top 10 ، راجع التقرير الرسمي .1 نقطة
-
بشكل عام، يوجد مجموعة من الثغرات التي يهتم مطورو الواجهات الخلفية بتغطيتها لضمان سلامة البيانات او سلامة التطبيق ككل، نذكر منها: ثغرات الحقن injections وتكون باستغلال حقول الادخال في تقديم شيفرات واكواد الى واجهة التطبيق الخلفية، قد تكون الشيفرات هاته استعلامات قواعد بيانات فتسمى SQL injection او تعليمات نظام تشغيل او طلبيات HTTP يوجد ايضا ثغرات اخرى من مثل: تزوير الطلبات عبر المواقع cross site request forgery البرمجة عبر الموقع cross site scripting او XSS ضعف ادارة جلسات الاتصال Broken session management التوجيه غير المحقق Invalid redirects and forwards وتلافي مشكلة استغلال هاته الثغرات يكون بتعلم اسس الامان في اللغة البرمجية التي تتعامل معها، فكل منها تقوم بتغطية او التخفيف من احتمالية الاصابة بهاته الثغرات بطريقته. ابتداءا من فحص الادخالات او فرض نوع معين من البيانات او تعريف المستخدم برمز مميز او ما الى ذلك.1 نقطة
-
اعتقد ان المشكلة في الكود : const randomnumber = Math.floor(Math.random * memesarray.length) حيث يبدو انك نسيت ان تستدعي الدالة random والشكل الصحيح هو const randomnumber = Math.floor(Math.random() * memesarray.length)1 نقطة
-
1 نقطة
-
يُعَدّ الشريط الرئيسي المحور الأساسي للعمل على تطبيق مايكروسوفت وورد، لاحتوائه على أهم الأدوات المستخدَمة أثناء تحرير النصوص وكتابتها، والتي تساعد على تنسيق النصوص، وتنظيم الفقرات، وإدراج القوائم، وتحديد أنماط الكتابة؛ إضافةً إلى أدوات البحث والاستبدال. تنسيق النص يمكننا تنسيق النصوص ضمن التطبيق عبر تحضير التنسيق مسبقًا، أو عبر تحديد النص المكتوب، ومن ثم اتخاذ إجراءات تعديل التنسيق بحسب المطلوب، فجميع أدوات تنسيق النصوص متواجدة ضمن شريط الأدوات الرئيسي، وسنتعرّف عليها تباعًا. تغيير حجم الخط بإمكانك كتابة حجم الخط الذي تريده في خانة تحديد حجم النص أو اختيار الحجم المطلوب من القائمة المُنسدلة، كما نستطيع تكبير حجم النص وتصغيره من خلال أيقونة التكبير والتصغير، بمقدار درجتين في كل نقرة. تغيير نوع الخط اختر نوع الخط المناسب لك من القائمة المنسدلة ضمن خانة تغيير أنواع الخطوط، والجدير بالذكر أنّ مايكروسوفت وفّرت مجموعةً محدودةً وقليلةً من الخطوط، بحيث لا يمكن إضافة أية خطوط إليها، إلا أنها قد تسمح بإضافة الخطوط مستقبلًا. أدوات تنسيق النص بإمكانك تعديل تنسيق نص ما عبر أدوات التنسيق لكتابة نص غامق أو مائل أو تحته خط، كما يمكننا تنسيق النص ليكون مشطوبًا بخط في المنتصف، وتتوفر أيضًا ميزة النص العلوي والسفلي المستخدَمة في كتابة المعادلات الرياضية أو الكيميائية. ونستطيع تغيير لون النص عبر اختيار أحد الألوان المتوفرة في قائمة ألوان الخط، وإذا أردنا اختيار لون جديد غير متوفر في هذه القائمة، فيمكننا النقر على خيار ألوان إضافية لاختيار اللون المطلوب. تمييز النص قد نحتاج إلى تمييز أجزاء من النص للإشارة إليها، أو للعودة إليها لاحقًا لتنفيذ بعض الإجراءات، أو التعديلات عليها. لذلك نستطيع استخدام ميزة تغيير لون خلفية النص باستخدام هذه الأداة، وعبر اختيار اللون المناسب. حيث يمكنك إزالة هذا التمييز من خلال خيار بلا لون ضمن القائمة. نسخ التنسيق نستطيع تطبيق تنسيق معين للنص على نص آخر، عبر نسخ هذا التنسيق دون الحاجة لإعادة تطبيق التنسيقات يدويًا، وهذا من خلال أداة نسخ التنسيق، حيث نحدد النص المراد نسخ تنسيقه، ثم نستخدم الأداة على النص المراد تطبيق التنسيق الجديد عليه. إزالة التنسيقات تُستخدم هذه الأداة لإزالة جميع التنسيقات المختلفة المطبقة على النصوص، والعودة إلى التنسيق الافتراضي. تغيير حالة الأحرف Change Case يمكنك تغيير حالة الأحرف في اللغة الإنجليزية، بحيث تكون الحروف كبيرةً أو صغيرة، عن طريق تحديد النص المراد تغيير نمطه، ثم الضغط على هذه الأداة واختيار النمط المناسب. خيار أحرف الجملة Sentence case: هو الخيار الافتراضي لكتابة الجملة العادية التي تبدأ بحرف كبير وباقي الأحرف صغيرة. خيار أحرف صغيرة lowercase: عبارة عن كتابة جميع الحروف بنمط الأحرف الصغيرة فقط. خيار أحرف كبيرة UPPERCASE: عبارة عن كتابة جميع الحروف بنمط الأحرف الكبيرة فقط. خيار كتابة أول حرف من كل كلمة بحرف كبير Capitalize Each Word: عبارة عن كتابة أول حرف من كل كلمة بنمط كبير، وباقي الأحرف تكون صغيرة. خيار تبديل حالة الأحرف tOGGLE cASE: عبارة عن كتابة كل الحروف كبيرة، ما عدا أول حرف من كل كلمة يكون صغيرًا. وهذا الخيار هو عكس خيار كتابة كل كلمة بحرف كبير Capitalize Each Word. أدوات التراجع والحافظة يمكننا استخدام أداتي التراجع والعودة، للتراجع عن الإجراءات المختلفة التي نفذناها ضمن المستند، أو لإعادة تنفيذها مجددًا بعد التراجع عنها. كما نستطيع نسخ أي كلمة أو جزء محدد من النص باستخدام أداة النسخ، أو بالضغط على الاختصار Ctrl + C من لوحة المفاتيح، ونستطيع قص هذا الجزء من النص أيضًا عبر أداة القص، أو باستخدام الاختصار Ctrl + X من لوحة المفاتيح، لنعمل على لصق الجزء المنسوخ أو المقصوص باستخدام أداة اللصق، أو بالاختصار Ctrl + V من لوحة المفاتيح. قد لا تعمل أيقونة اللصق عادةً إلا بعد تثبيت إضافة خاصة للمتصفح تسمح باستخدام هذه الأداة، ولكن يمكنك استخدام الاختصار Ctrl + V من لوحة المفاتيح لتنفيذ أمر اللصق دون الحاجة لتثبيت الإضافة. أدوات الفقرة تتضمن أدوات المحاذاة والتعداد بأنواعها، إضافةً إلى تحديد اتجاه الكتابة، وتباعد الأسطر، والمسافة البادئة وغيرها. محاذاة النص تستطيع باستخدام هذه الأدوات أن تتحكم في محاذاة النص إلى اليمين، واليسار، والوسط، أو الضبط. نستخدم المحاذاة لليمين عادةً عند كتابة النصوص باللغة العربية، فيما نستخدم المحاذاة لليسار، عند الكتابة باللغات الأجنبية، أو عند كتابة الرموز البرمجية، أو المعادلات الكيميائية، وغيرها. بينما نستخدم المحاذاة للوسط عند كتابة العناوين، أو القواعد، أو النصوص المهمة. وأخيرًا، نستخدم محاذاة الضبط لتوحيد نهايات الأسطر عن طريق إضافة مسافات بين الكلمات. أداة التباعد بين الأسطر يُوفر لك الوورد ميزة التعديل في المسافات ما بين الأسطر والفقرات، كما يأتي: لتغيير المسافة بين الأسطر اضغط على الأداة واختر الحجم المناسب، مع العلم أنّ المسافة الإفتراضية بين الأسطر في برنامج الوورد هي (1.08). لإضافة مسافة قبل الفقرة اضغط على إضافة مساحة قبل الفقرة. لحذف المسافة بعد الفقرة اضغط على إزالة مساحة بعد الفقرة. للحصول على خيارات أكثر اضغط على خيارات تباعد الأسطر. وتتضمن هذه الخيارات محاذاة النص والمسافة البادئة لكامل "قبل أو بعد" النص، أو للسطر الأول، أو العكس، وكذلك خيارات ما قبل، وبعد، ونوعية التباعد بين الأسطر. تغيير المسافات البادئة تستطيع تغيير المسافات البادئة للتحكم أكثر في كيفية ظهور النص، عبر تحديد النص، ثم اختيار أحد الخيارات التالية. خيار لا يوجد: هو الخيار الافتراضي. خيار السطر الأول: يترك مسافة قبل أول سطر من الفقرات المحددة. يمكنك زيادة أو إنقاص المسافات البادئة للسطر الأول عن طريق استخدام التحكم بالمسافة البادئة. خيار معلقة: يترك مسافة قبل كل الأسطر ما عدا أول سطر من الفقرات التي حُدِّدت. تغيير اتجاه الكتابة بإمكانك تغيير اتجاه الكتابة من اليمين إلى اليسار، أو من اليسار إلى اليمين، باستخدام هذه الأداة، حيث توفّر اتّباع نمط الكتابة باللغة العربية السليمة، دون التسبب بنمط كتابة غير منتظم عند استخدام النقاط، والأقواس، والكلمات اللاتينية ضمن النص العربي. إنشاء التعدادات (القوائم) تُعضدّ القوائم من الأدوات المهمة التي تعمل على تنظيم النص وتجميله، بالإضافة إلى تسهيل قراءته بالنسبة للقارئ. وهناك ثلاثة أنواع من القوائم، هي : التعداد النقطي (القائمة المنقطة)، والتعداد المرقم (القائمة المرقمة)، والقائمة متعددة المستويات. 1. التعداد النقطي لإنشاء قائمة بتعداد نقطي حدَّد النص أولًا، ثم اضغط على أداة التعداد النقطي. يُتيح لك الوورد مجموعةً من الرموز لإنشاء قوائم منقطة، حيث نستطيع إنشاء، وتصميم تعداد نقطي جديد عبر الخطوات التالية: الضغط على خيار تعريف رمز تعداد نقطي جديد. اختر أحد الرموز من الخط الافتراضي وهو هنا Times New Roman، أو اختر أحد الخطوط الأخرى من القائمة المُنسدلة مثل wingdings 2، فهو يحوي مجموعةً كبيرةً ومميزةً من الرموز. بعد اختيارك للرمز الذي ترغب في كتابته، اضغط على إدراج، وبذلك سيتغير شكل النقطة في التعداد النقطي إلى شكل الرمز الذي اخترته للتو. ولحذف التعداد النقطي، حدَّد النص أولًا، ثم اضغط على نفس الأداة مرةً أخرى. وإذا نسيت تحديد النص، فسيُزيل الوورد التعداد النقطي من الفقرة التي بها موضع المؤشر فقط، لذلك احرص على تحديد كامل النص أولًا. ويمكنك أيضًا حذف التعداد النقطي بالضغط على خيار "بلا" من نفس الأداة. 2. التعداد الرقمي لإنشاء قائمة بتعداد رقمي، حدَّد النص أولًا، ثم اضغط على أداة التعداد الرقمي، حيث يكون الخيار الافتراضي هو (1. 2. 3.)، لكن يمكنك اختيار أحد الأشكال الأخرى للتعداد الرقمي من الخيارات المتاحة. يمكنك حذف التعداد الرقمي بنفس طريقة حذف التعداد النقطي. 3. قائمة متعددة المستويات لإنشاء قائمة متعددة المستويات -أي قائمة تندرج تحت قائمة أخرى-، حدَّد النص أولًا، ثم اضغط على أداة القائمة متعددة المستويات واختر التعداد المناسب. إذا ضغطت على تلك الأداة، فسيكون الشكل النهائي هو قائمة واحدة غير متعددة المستويات كما هو موضح بالصورة. لذلك ينبغي عليك الضغط أولًا على زرّ 'Tab' من لوحة المفاتيح، أمام الفقرات التي تريدها أن تكون قائمةً جديدةً تندرج تحت القائمة الرئيسية. الجدير بالذكر أنه إذا أردت التغيير بين الأشكال الأخرى للقائمة متعددة المستويات، فيمكنك ذلك عن طريق الضغط على زرّ Tab أكثر من مرة. أنماط الكتابة يُتيح لك الوورد مجموعةً من الأنماط، وبإمكانك الاختيار منها من القسم المخصص لها من الشريط الرئيسي. حيث من أجل التغيير ما بين الأنماط، حدّد النص أولًا، ثم اختر النمط المناسب. إذا أردت نمطًا آخر، فبإمكانك الضغط على السهم الصغير يسار لوحة الأنماط، واختيار النمط المناسب من القائمة المُنسدلة. يُتيح لك الوورد إمكانية إنشاء نمطك الخاص من خلال تحديد النص، أو وضع مؤشر الكتابة مكان الكلمة أو الفقرة التي تريد إنشاء نمط كتابة مماثل لها، ومن ثم الضغط على خيار إنشاء نمط جديد من التنسيق. ستظهر لك نافذة إنشاء نمط جديد من التنسيق، حيث يتضمن اسم النمط وخانة معاينة طريقة عرض النمط. هناك أنماط أخرى بإمكانك الوصول إليها عند الضغط على خيار تطبيق الأنماط. لإزالة تنسيق أنماط الكتابة اختر مسح التنسيق. بحث واستبدال يُوفر لك الوورد ميزات البحث والاستبدال مع مختلف الخصائص والخيارات المتعلقة بها وسنذكرها تاليًا. أداة البحث من الصعب البحث عن الكلمات ضمن المستندات كبيرة الحجم، فأداة البحث هنا تغنيك عن عناء البحث عن الكلمات يدويًا، وللبحث عن كلمة أو نص، اضغط على خيار بحث، ثم اكتب الكلمة أو النص الذي تريد البحث عنه في الخانة المخصصة للبحث، حيث سيعمل الوورد على تمييز النتائج بلون أصفر. وللتنقل بين النتائج صعودًا وهبوطًا، استخدِم السهمين في يسار لوحة البحث، أو تستطيع استخدام عصا التمرير لتمرير النتائج بسرعة أكبر. أداة الاستبدال إذا كان هناك كلمة تتكرر كثيرًا في المستند، وتريد استبدالها بكلمةٍ أخرى مرةً واحدة دون عناء إجراء الاستبدال لكل كلمة استخدم أداة بحث واستبدال. اضغط على هذه الأداة. اكتب الكلمة التي تريد استبدالها في خانة البحث. ثم اكتب الكلمة الّتي تريد أن تكون محلها في خانة الاستبدال. إذا أردت استبدال كلمة واحدة، فبإمكانك اختيارها بالضغط على الجملة التي بها كما أشرنا سابقًا، ثم الضغط على استبدال. أما إذا أردت استبدال كل الكلمات بكلمة أخرى، فاضغط على استبدال الكل. وبذلك تُستبدل جميع الكلمات المحددة بالكلمة الجديدة. خاتمة تعرفنا في هذا الدرس على كل ما يتضمنه الشريط الرئيسي في تطبيق الوورد 365 من أدوات وخيارات تساعدنا على تنسيق النصوص، وإجراء مختلف العمليات عليها، وتنظيمها لإنتاج مستندات نصية مميزة من حيث التنسيق. اقرأ أيضًا إدراج الجداول والصور في مايكروسوفت وورد 365 أونلاين مدخل إلى تطبيق مايكروسوفت وورد 365 أونلاين1 نقطة