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

كل الأنشطة

تحدث تلقائيًا

  1. الساعة الماضية
  2. اليوم
  3. أنا شريك في مشروع بنسبة50% مع شريك آخر بنفس النسبه ولكني أتولي إدارة المشروع كامله وهو مشارك بنصف رأس المال فقط كم تكون نسبة الاداره من الأرباح
  4. المشاريع الي تقصدها هل انت تطلب مني مشروع ولا تقصد المشاريع الي نطبقها اثنا الدوره و هل مشاريع السكراتش من ضمن المشاريع
  5. غالبًا المشكلة لديكِ هي أنك لم تقومي بفتح مجلد المشروع في vscode، حيث فتح المجلد بالكامل وليس ملف index.html فقط، وذلك لكي تعمل إضافة live server. يمكنك فتح المجلد بسحبه وإلقاءه في واجهة vscode وسيتم فتح المجلد، أو من خلال الضغط على file بالأعلى في vscode ثم إختيار open folder ثم اختاري مجلد المشروع. الآن اضغطي على go live لتشغيل السيرفر.
  6. وعليكم السلام ورحمة الله، التوثيق (Documentation) هو مجموعة الصفحات (المعروضة عادة على الموقع الرسمي) التي تشرح كل تفاصيل لغة البرمجة أو المكتبة أو إطار العمل (أو أي شيء آخر، حتّى لو كان غير متعلّق بالبرمجة). ميزة التوثيق أنّه يتضمّن كلّ شيء متعلّق بالموضوع المدروس (أو على الأقل، هذا هو المفروض). مثلا، في توثيق لغة Python، تجد كل عرضا (مع بعض الشرح) لكلّ وحدات المكتبة الرئيسية التي تأتي مع مفسّر هذه اللغة. فمثلا، توجد وحدة pickle لتخزين جميع هياكل بيانات Python في ملفات، وتوجد وحدة zipfile للتعامل مع الأرشيف، وتوجد وحدة wave لمعالجة الصوت، وهكذا... التوثيق هو جزء ضروري من أي مشروع. لا يمكن أن تكون هناك لغة برمجة أو إطار عمل أو حتى مكتبة صغيرة من دون توثيق (إذا كان هناك مشروع بدون توثيق فلا تنظر إليه أصلا!). أمّا الدروس التعليمية، سواء كانت مقروءة أم مشاهدة، فهذه ليست أساسية. بالطبع، كل لغات البرمجة وأطر العمل الشهيرة سوف تجد لها دروسا تعليمية، لكن هذا الأمر ليس دائما. سوف تتعامل في مسيرتك البرمجية مع مكتبات غير مشهورة، وهذه لن تجد لها دروسا تعليمية لكن سيكون عليك الاعتماد على نفسك من خلال الاستعانة بالتوثيق. بالطبع لا، وهذه فائدة التوثيق، فهو يمثّل مرجعا تعود إليه كلّما احتجت إلى مراجعة ما نسيته أو تعلّم إمكانيات إضافية للمكتبة من التي لم تكن تعرفها بعد. شخصيا، استخدمت Numpy في كثير من المشاريع ومع ذلك لم أستخدم منها سوى مميزات قليلة منها، أمّا أغلب مميزات المكتبة فلا أحسن استخدامها، لكن يمكنني دائما العودة إلى التوثيق والبحث في الأنترنت من أجل التعلم أكثر.
  7. التوثيقات بشكل عام مهمة وضرورية لفهم آلية عمل وسير أي لغة وأي إطار عمل بحيث توضح كيفية التعامل معها أو الاستفادة منها، وذلك بشكل أشمل. وكذلك: توضيح الوظائف والميزات احتواءها على أمثلة واقعية. احتواءها على توجيهات وتفضيلات الاستخدام. تحتوي شرحا للتوافق والاعتماديات ومتطلبات التشغيل. فيما يتعلق بمكتبة مثل NumPy، ليس من الضروري أن تعرف كل شيء عنها. ومع ذلك، من المفيد أن تكون قادرا على فهم الأساسيات وكيفية استخدام الوظائف الرئيسية التي تحتاجها في مشروعك. سيساعدك الاطلاع على التوثيق في فهم كيفية استخدام NumPy بشكل أكبر وأكثر فعالية، ولكن لا تحتاج إلى معرفة كل جزء من التفاصيل بطبيعة الحال، فالتوثيق رغم ذلك يبقى مرجعا يسهل العودة إليه للاستفادة منه ومما يشرحه.
  8. السلام عليكم اي هي اهميه الDocumentation لغه بايثون او اطارة العمل وهكذا ؟ واي الفرق بين ال Documentation والفديوهات البتشرح الغه او المكتبه وهل انا كامبرمج في مجال تعلم الاله بنسخدم مكتبه زي numpy هل الازام اكون عرف كل حاج عن المكتبه ده والا الا
  9. تقدري تبحثي في جوجل باستخدام الكلمات الرئيسية المرتبطة بمشروع إدارة صالات المناسبات والأفراح مثل "event management"، "venue management"، "wedding management"، "party management" وما إلى ذلك ثم قمي بوضع كلمة GitHub في اخر الكلمه الرئيسيه بنسبه لاختيار قاعدة البيانات لا يوجد واحده افضل من الاخري ولاكن يوجد الانسب للمشروع الاثنين يستطيعو بناء المشروع بكفاءة ولاكن علي المدي البعيد يفضل استخدام MYSql .
  10. كيف يمكنني البحت عن مشاريع مشابهة مشروعنا في قيت هاب؟ ايضا لدي سؤال على قاعدة البيانات هل يفضل استخدام mongodb او mysql في المشاريع ؟
  11. يمكنك الاستماع للحدث beforeunload للقيام بأي أكشن قبل مغادرة المستخدم الصفحة، قبل ذلك ستحتاج تعطيل السلوك الافتراضي لهذا الحدث، ثم القيام بذلك بشكل مخصص. إليك مثالا: window.addEventListener('beforeunload', function (e) { e.preventDefault(); e.returnValue = ''; return ''; }); function confirmExit() { return confirm("اذا غادرت الصفحة لن يتم حفظ البيانات. هل ترغب في المغادرة؟"); } أو نحوه: <body onbeforeunload="return confirmExit()"> الأحداث المتعلقة بدورة حياة صفحة HTML وكيفية التحكم بها عبر جافاسكربت
  12. لحفظ اسم الصورة في قاعدة البيانات والصورة نفسها في مجلد الرفع، يمكنك إجراء التعديلات التالية على الشفيرة: -قم بتعديل نوع العمود في جدول قاعدة البيانات لتخزين اسم الملف بدلا من تخزين المسار الكامل للصورة. -استخدم دالة move_uploaded_file() لحفظ الصورة في المجلد المحدد. واخيرا، قم بتحديث استعلام الإدراج لتخزين اسم الملف في قاعدة البيانات بدلا من المسار الكامل. وبعد عمل هذه التعديلات: تأكد من تعديل هيكل جدول قاعدة البيانات بحيث يحتوي العمود المخصص لاسم الملف على نوع بيانات يمكنه تخزين أسماء الملفات. وتأكد من أن عملية التحميل تتم بنجاح وأن الصورة تحفظ في المجلد المحدد uploads. لقد بينت لك الطريقة ، و اريدك أن تقوم بعملها بنفسك لكى تكتسب خبرة وتنقل مستواك.
  13. لا، على الرغم من أن Python مدعومة بشكل طبيعي في macOS ويمكن تشغيل البرامج التي تستخدم Python على أجهزة Mac، إلا أن لغة Python لا تستخدم على نطاق واسع في تطوير تطبيقات iOS لأجهزة iPhone وiPad أو تطبيقات macOS لأجهزة Mac وغيرها من منتجات Apple. هنالك لغات برمجة أخرى مثل Swift و Objective-C تستخدم على نطاق أوسع لتطوير تطبيقات iOS و macOS. في حين أن بايثون غالبًا ما يستخدم في تطبيقات الخادم وتطوير الويب وتطبيقات الذكاء الصناعي، ولكنه يمكن استخدامه في بعض التطبيقات المحمولة باستخدام إطار عمل مثل Kivy أو PyObjC.
  14. يمكنك استعمال المحددات الزائفة الأخرى أيضا، ونذكر: ::selection ::first-letter ::first-line ::marker بجانب أنه يمكنك القيام بالعملية بشكل قياسي، ضف العنصر ضمن هيكلة HTML وليكن div آخر أو غيره، ثم قم بتنسيقه باستخدام CSS بشكل عادي. سوف يعطيك ذاك تحكما أكبر في الهيكلة وفي الكود.
  15. نلقي نظرة في هذا المقال على الصياغة اﻷساسية لكائن جافا سكريبت كما نستذكر بعض الميزات التي ناقشناها سابقًا لنشدد على حقيقة أن العديد من الميزات التي اطلعنا عليها وتعاملنا معها في لغة جافا سكريبت هي في الواقع كائنات، ابتداءً من المميزات البنيوية للغة مثل المصفوفات إلى الواجهات البرمجية للمتصفحات APIs المبنية على أساس جافا سكريبت. وبإمكانك أيضًا بناء كائنات خاصة بك لتغليف مجموعة من الدوال والمتغيرات ضمن حزمة أكثر فعالية تعمل كحاوية بيانات. ولا بد أن تتفهم طبيعة جافا سكريبت القائمة على الكائنات إن أردت التعمق أكثر في تعلم هذه اللغة، لهذا نزوّدك ضمن هذا المقال والمقالات التالية بمعلومات مهمة عن الكائنات البرمجية وصياغتها بشيء من التفصيل ثم ننتقل إلى شرح طريقة بناء كائنات خاصة بك. ننصحك قبل أن تبدأ العمل معنا في هذه السلسلة أن تطلع على: أساسيات HTML أساسيات عمل CSS أساسيات جافا سكريبت أساسيات الكائنات الكائن object هو مجموعة مترابطة من البيانات أو الوظائف، فهو يتألف عادة من من عدة متغيرات ودوال (تُدعى المتغيرات ضمن الكائن خاصيات properties والدوال methods). وحتى نستوعب مفهوم الكائنات سنعمل على المثال التالي. أنشئ أولًا نسخة من الملف oojs.html على حاسوبك. ويتضمن هذا الملف العنصر <script> الذي سنكتب ضمنه الشيفرة. سنستخدم هذه الصفحة كأساس لاستكشاف الصياغة اﻷساسية للكائن في جافا سكريبت. وعليك أن تفتح طرفية جافا سكريبت الخاصة بأدوات مطوري ويب وتجعلها جاهزة لكتابة التعليمات. وكما هو الحال في الكثير من اﻷشياء في جافا سكريبت، يبدأ إنشاء الكائن بتعريف وتهيئة بعض المتغيرات. لهذا جرّب إدخال السطر التالي تحت السطر الموجود أصلًا في ملف التمرين ثم احفظ التغييرات وأعد تحميل الصفحة: const person = {}; افتح اﻵن طرفية جافا سكريبت ثم اكتب person ضمنها ثم اضغط المفتاح Enter. من المفترض أن تحصل على نتيجة مشابهة للتالي: [object Object] Object { } { } تهانينا! لقد أنشأت للتو كائنًا في جافا سكريبت. لقد أنجز العمل بالفعل، لكن الكائن فارغ كما تلاحظ ولا يمكن أن يفيدنا كثيرًا. لهذا سنعدّل الكائن ضمن شيفرة جافا سكريبت في ملف التمرين كالتالي: const person = { name: ["Bob", "Smith"], age: 32, bio: function () { console.log(`${this.name[0]} ${this.name[1]} is ${this.age} years old.`); }, introduceSelf: function () { console.log(`Hi! I'm ${this.name[0]}.`); }, }; جرّب إدخال بعض التعليمات كما يلي في طرفية جافا سكريبت وذلك بعد حفظ التغييرات وإعادة تحميل الصفحة: person.name; person.name[0]; person.age; person.bio(); // "Bob Smith is 32 years old." person.introduceSelf(); // "Hi! I'm Bob." يضم الكائن بعض البيانات اﻵن كما يحتوي على بعض الوظائف التي يمكن الوصول إليها من خلال صياغة بسيطة واضحة. ما الذي يحدث فعلًا في مثالنا؟ لقد أنشأنا كائنًا مكوّنًا من عدة أعضاء members لكل منها اسم ( مثال name و age) وقيمًا مثل ['Bob, 'Smiths] و 32. يفصل بين كل زوج (اسم/قيمة) فاصلة ,، وبين كل اسم وقيمة نجد نقطتين متعامدتين :. وتتبع صياغة الكائن الشكل التالي دائمًا: const objectName = { member1Name: member1Value, member2Name: member2Value, member3Name: member3Value, }; قد تكون قيمة أعضاء الكائن أي شيء، وفي مثالنا السابق ضم الكائن person أعدادًا ومصفوفة ودالتين. إن أول عضوين كما رأينا يضمان بيانات عن الكائن ويُشار إليهما كخاصيات properties، كما يُشار إلى الدالتين اللتان تسمحان للكائن بتنفيذ بعض العمليات على البيانات بالتوابع أو الدوال التابعة للكائن methods. وعندما يكون عضو الكائن دالة، باﻹمكان استخدام صياغة أبسط من bio:function، ويكفي أن نكتب ()bio كالتالي: const person = { name: ["Bob", "Smith"], age: 32, bio() { console.log(`${this.name[0]} ${this.name[1]} is ${this.age} years old.`); }, introduceSelf() { console.log(`Hi! I'm ${this.name[0]}.`); }, }; وسنستخدم من اﻵن وصاعدًا الصيغة المختصرة في تعريف الدوال. ندعو الكائنات التي تُبنى كما شرحنا سابقًا بالكائنات الحرفية literal object لأننا كتبنا حرفيًا كل أعضائها عند إنشائها. وهي كائنات مختلفة عن تلك التي تُنسخ عن اﻷصناف، والتي سنلقي عليها نظرة لاحقًا. من الشائع أيضًا إنشاء الكائنات كنسخ عن الكائنات الحرفية، وخاصة عندما نريد نقل سلسلة من البيانات المهيكلة المترابطة مثل إرسال طلب إلى خادم لوضع البيانات ضمن قاعدة بيانات. فإرسال كائن واحد أكثر فعالية من إرسال البيانات بشكل مستقل ومن اﻷسهل التعامل معها موازنة بالتعامل مع مصفوفة عندما تريد تحديد كل عنصر باسمه بشكل مستقل. طريقة النقطة Dot notation للوصول إلى أعضاء الكائن لقد وصلنا في مثالنا السابق إلى خاصيات وتوابع الكائن باستخدام العامل . ويسمى هذا الأسلوبالتدوين النقطي أو الاستدعاء النقطي dot notation. حيث يسلك اسم الكائن person سلوك فضاء الأسماء namespace. ولا بد من كتاب اسم الكائن أولًا للوصول إلى أي عضو من أعضاءه ومن ثم تكتب النقطة ومن ثم العضو الذي تريد الوصول إليه، وقد يكون العضو عنصرًا أو مصفوفة أو استدعاء أحد توابع الكائن. person.age; person.bio(); الكائنات والخاصيات على شكل كائنات يمكن للخاصية بحد ذاتها أن تكون كائنًا، جرّب مثلًا أن تغيّر العضو name من الشكل التالي: const person = { name: ["Bob", "Smith"], }; ليصبح بالشكل: const person = { name: { first: "Bob", last: "Smith", }, // … }; وللوصول إلى هذه العناصر لا بد من ربطها بالكائن الرئيسي بكتابة نقطة أخرى. جرّب كتابة الشيفرة التالية في طرفية جافا سكريبت: person.name.first; person.name.last; فإن فعلت ذلك، عليك العودة إلى الشيفرة وتغيير كل شيفرة من الشكل: name[0]; name[1]; إلى name.first; name.last; وإلا لن تعمل التوابع. استخدام طريقة اﻷقواس في الوصول إلى أعضاء الكائن باﻹمكان الوصول إلى أعضاء الكائن باستخدام طريقة اﻷقواس المربعة Bracket notation فبدلًا من استخدام النقطة كما في المثال التالي: person.age; person.name.first; يمكننا استخدام الأقواس كما في الكود التالي: person["age"]; person["name"]["first"]; يبدو اﻷمر مشابهًا للوصول إلى عناصر مصفوفة، هو من ناحية المبدأ اﻷمر ذاته، فبدلًا من الوصول باستخدام دليل المصفوفة index، تستخدم الاسم المرتبط بقيمة العنصر. لهذا السبب تًدعى الكائنات أحيانًا مصفوفات ترابطية associative arrays، فهي ترتبط بالقيم النصية بنفس الطريقة التي ترتبط فيها المصفوفة بدليلها. يُفضّل استخدام طريقة النقطة على طريقة اﻷقواس عمومًا لأنها أكثر وضوحًا وأسهل قراءة. لكن ستجد بعض الحالات التي تستخدم فيها اﻷقواس المربعة مثل إسناد قيمة خاصية على شكل كائن إلى متغيّر، فلن تستطيع في هذه الحالة استخدام النقطة للوصول إلى القيمة، لكن باﻹمكان استخدام الأقواس المربعة. في المثال التالي، يمكن للدالة أن تستخدم الطريقة person[propertyName] للوصول إلى القيمة المخزنة في الخاصية proertyName: const person = { name: ["Bob", "Smith"], age: 32, }; function logProperty(propertyName) { console.log(person[propertyName]); } logProperty("name"); // ["Bob", "Smith"] logProperty("age"); // 32 ضبط قيم أعضاء الكائن كل ما تعلمناه حتى اللحظة هو الحصول على قيمة أعضاء الكائن object members، لكن باﻹمكان أيضًا ضبط قيمة هذه الأعضاء بالتصريح عن العضو الذي تريد ضبطه (باستخدام طريقة النقطة أو اﻷقواس المربعة) كالتالي: person.age = 45; person["name"]["last"] = "Cratchit"; جرّب إدخال التعليمتين التاليتين ضمن طرفية جافا سكريبت، ولاحظ كيف تغيرت القيمة: person.age; person["name"]["last"]; لا يقتصر ضبط قيم أعضاء الكائن على تغيير القيمة الموجودة للخاصيات أو التوابع، بل يمكنك إنشاء عناصر جديدة كليًا. جرّب اﻵن ما يلي في الطرفية: person["eyes"] = "hazel"; person.farewell = function () { console.log("Bye everybody!"); }; اختبر اﻵن العناصر الجديدة: person["eyes"]; person.farewell(); // "Bye everybody!" من إيجابيات استخدام طريقة اﻷقواس المربعة أنه باﻹمكان استخدامها في ضبط قيمة اﻷعضاء ديناميكيًا إضافة إلى تغيير أسماء الأعضاء أيضًا. لنفترض أننا نريد منح المستخدم القدرة على تخزين أنواع مخصصة من القيم في بيانات اﻷشخاص وذلك بكتابة اسم العضو وقيمته ضمن مربعي إدخال نصي منفصلين. باﻹمكان إنجاز اﻷمر كالتالي: const myDataName = nameInput.value; const myDataValue = nameValue.value; نضيف بعدها هذا العضو الجديد إلى الكائن person كالتالي: person[myDataName] = myDataValue; ولاختبار اﻷمر، جرّب إضافة الأسطر التالية إلى شيفرتك، أسفل قوس إغلاق الكائنن person: const myDataName = "height"; const myDataValue = "1.75m"; person[myDataName] = myDataValue; جرّب حفظ التغييرات وإعادة تحميل الصفحة ثم إدخال التالي ضمن مربع اﻹدخال النصي: person.height; إن إضافة خاصية إلى الكائن باستخدام اﻷسلوب السابق لن يكون ممكنًا باستخدام طريقة النقطة والتي تقبل فقط الاسم الحرفي للعضو ولا تقبل قيمة متغير يشير إلى الاسم. لماذا استخدمت الكلمة المحجوزة this لربما قد لاحظت شيئًا غريبًا في أسلوبنا في الشيفرة السابقة، ألق نظرة اﻵن على هذا المثال: introduceSelf() { console.log(`Hi! I'm ${this.name[0]}.`); } لربما تتساءل ماذا فعلت الكلمة this؟ تشير هذه الكلمة المحجوزة إلى الكائن الحالي الذي كُتبت الشيفرة ضمنه، فهي في مثالنا تكافئ الكائن person. لماذا إذًا لا نستخدم person وحسب؟ في الواقع، لا فائدة من استخدام الكلمة this كثيرًا في حال أنشأت كائن حرفي وحيد، لكن إن أنشأت أكثر من كائن حرفي، يساعدك ذلك في استخدام نفس تعريف التابع لكل كائن أنشأته. لنوضح ذلك من خلال المثال التالي: const person1 = { name: "Chris", introduceSelf() { console.log(`Hi! I'm ${this.name}.`); }, }; const person2 = { name: "Deepti", introduceSelf() { console.log(`Hi! I'm ${this.name}.`); }, }; في هذه الحالة، ينتج عن تنفيذ التعليمة ()person1.introduceSelf الخرج التالي "Hi! I'm Chris."، بينما ينتج عن تطبيق نفس التابع على كائن آخر ()person2.introduceSelf من نفس النوع خرج آخر مناسب للكائن "Hi! I'm Deepti". وعلى الرغم من أن الشيفرة نفسها في الحالتين، لكن أهميتها لن تظهر عند كتابة كائنات حرفية يدويًا، بل عندما تبدأ باستخدام الدوال البانية constructors ﻹنشاء أكثر من كائن من تعريف واحد له وهذا ما نناقشه تاليًا. مقدمة إلى الدوال البانية Constructors لا بأس باستخدام الكائنات الحرفية عندما تريد استخدام كائن واحد، لكن إن كان عليك إنشاء أكثر من عنصر سيغدو استخدام العناصر الحرفية غير ملائم. إذ علينا كتابة نفس الشيفرة لكل كائن على حدى، وإن كان علينا تغيير بعض الخاصيات كإضافة الخاصية height، لا بد من تذكرّ تغيير كل الكائنات التي أنشأتها. من الأفضل استخدام شكل أو نموذج للكائن يضم كافة التوابع والخاصيات اللازمة، ومن ثم إنشاء العدد الذي يلزمنا من هذا الكائن وفق هذا الشكل بتعديل قيم الخواص المختلفة. إليك نسخة أولى من الشكل الذي نتحدث عنه وهو على شكل دالة: function createPerson(name) { const obj = {}; obj.name = name; obj.introduceSelf = function () { console.log(`Hi! I'm ${this.name}.`); }; return obj; } تُنشئ الدالة وتعيد كائنًا جديدًا في كل مرة نستدعيها، ويضم هذا الكائن عضوين هما: الخاصية: name. التابع: ()introduceSelf. تأخذ الدالة ()createPersonمعاملًا وحيدًا هو name لضبط قيمة الخاصية name، لكن تبقى قيمة التابع ()introduceSelf نفسها لجميع الكائنات التي تنشأها الدالة. ويُعد هذا اﻷسلوب من أكثر الطرق شيوعًا في إنشاء الكائنات. بإمكانك اﻵن إنشاء العدد الذي تريده من الكائنات، بإعادة استخدام الدالة: const salva = createPerson("Salva"); salva.name; salva.introduceSelf(); // "Hi! I'm Salva." const frankie = createPerson("Frankie"); frankie.name; frankie.introduceSelf(); // "Hi! I'm Frankie." ستعمل الشيفرة السابقة جيدًا لكنها طويلة بعض الشيء. إذ أنشأنا كائنًا فارغًا ثم هيأناه وأعدناه، لكن الطريقة اﻷفضل تقضي باستخدام دالة بانية، وهي دالة نستدعيها باستخدام الكلمة المحجوزة new. وعندما نستدعي دالة بانية فإنها: تنشئ كائنًا جديدًا. تربط this بالكائن الجديد، وستتمكن عندها من اﻹشارة إلى الكائن الجديد من خلالها ضمن شيفرة الدالة البانية. تعيد الكائن الجديد. تبدأ أسماء الدوال البانية عادة بحرف كبير وتسمى باسم نوع الكائن الذي تنشؤه، لهذا سنعيد كتابة مثالنا ليصبح بالشكل التالي: function Person(name) { this.name = name; this.introduceSelf = function () { console.log(`Hi! I'm ${this.name}.`); }; } ولكي نستدعي الدالة ()Person كدالة بانية نستخدم الكلمة new: const salva = new Person("Salva"); salva.name; salva.introduceSelf(); // "Hi! I'm Salva." const frankie = new Person("Frankie"); frankie.name; frankie.introduceSelf(); // "Hi! I'm Frankie." لقد استخدمت الكائنات كثيرًا فيما مضى لربما تساءلت أثناء العمل على الأمثلة السابقة بأن استخدام النقطة كان مألوفًا، والسبب أنك استخدمتها طوال فترة تعلم جافا سكريبت عبر سلسلة مقالتنا. فكل مرة عملنا فيها مع مثال يستخدم واجهة المتصفح البرمجية أو كائنات جافا سكريبت، استخدمنا فيها الكائنات لأنها ميزات بنيت باستخدام الطريقة نفسها التي بنينا فيها الكائنات المخصصة في مثالنا اﻷخير، لكنها بالطبع أكثر تعقيدًا. فعندما تستخدم التابع النص كما في المثال التالي: myString.split(","); فأنت تستخدم التوابع التي يوفرّها الكائن String. وفي كل مرة تنشئ فيها سلسلة نصية في شيفرتك، سيتولد هذا النص تلقائيًا كنسخة عن الكائن String، ويشترك معه بالعدبد من الخاصيات والتوابع. وعندما تحاول الوصول إلى كائن المستند باستخدام شيفرة كالتالي: const myDiv = document.createElement("div"); const myVideo = document.querySelector("video"); فأنت تستخدم في الواقع التوابع التي يقدّمها الكائن أو الواجهة البرمجية Document، وعند كل تحميل لصفحة الويب تُنشئ نسخة جديدة عن هذا الكائن تُدعى document تمثّل هيكلية الصفحة بأكملها ومحتواها وغير ذلك من الميزات مثل عناوين URL. أي باختصار، سيمتلك الكائن الذي أنشأته عدة توابع وخاصيات يشترك فيها مع الكائن الأساسي Document. وهذا الأمر مشابه للكثير من الكائنات والواجهات البرمجية المضمنة في لغة جافا سكريبت مثل المصفوفات Array والمكتبة Math. لاحظ أن الكائنات والواجهات البرمجية الأصلية أو المدمجة في جافا سكريبت لا تنشأ من تلقاء نفسها بل عليك إنشاؤها بنفسك في كل مرة تحتاجها، مثل الواجهة البرمجية للتنبيهات Notifications API التي تسمح للمتصفحات الحديثة بإطلاق تنبيهات، حيث تتطلب هذه الواجهة منك أن تنشئ نسخة جديدة باستخدام الدالة البانية لكل تنبيه تريد إطلاقه. جرّب إدخال السطر التالي إلى طرفية جافا سكريبت: const myNotification = new Notification("Hello!"); الخلاصة لقد أنهينا هذه المقال التي يمهّد لاستخدام الكائنات في جافا سكريبت، ولا بد أنك امتلكت بقراءته فكرة عن عمل الكائنات، بما في ذلك إنشاء كائنات بسيطة. ومن المهم إدراك أهمية الكائنات كبنى لتخزين البيانات والوظائف المترابطة. فلو حاولت تتبع جميع الخاصيات والتوابع في الكائن person الذي بنيناه في مثالنا شكل متغيرات ودوال منفصلة ستجد أنها طريقة غير مجدية ومحبطة، وستزيد مخاطر التضارب بين المتغيرات والدوال التي تمتلك نفس اﻷسماء. إذ تساعد الكائنات في حفظ المعلومات ضمن حاويات خاصة بها لتقليل مثل هذه المخاطر. ترجمة -وبتصرف- للمقال JavaScript object basics اقرأ أيضًا مدخل إلى جافاسكريبت كائنية التوجه (Object-Oriented JavaScript) لغة البرمجة بالكائنات Object-Oriented Programming برمجة الكائنات Objects في جافاسكريبت مختصر البرمجة كائنية التوجه OOP وتطبيقها في بايثون
  16. بالتأكيد سأعطيك مثالين سيوضحان لماذا عليه استخدام الخوارزمية في اماكن و الهيورستيك في اماكن اخرى لنفترض انه لدينا مجموعة الارقام هذه ونريد ايجاد العدد الاكبر منها فما هي الطريقة المناسبة للحل ؟؟؟ دعنا نحلها على الطريقتين لنجد الافضل 20 , 8 , 6 , 15 , 7 , 8 , 3 algorithmic solutions : بهذه الطريقة نبدأ ب العنصر الأول ونقارن كل عنصر بالعنصر الذي يليه للعثور على العدد الأكبر وسيظهر الناتج 20 وهذه هي الطريقة الصحيحة لحل هذه المشكلة heuristic solutions : هنا ستقوم بافتراض ان العدد الاوسط ممكن ان يكون الاكبر لانه غالبا ما يكون كذلك وبالتالي قد تعطينا نتيجة خاطئة والتي هي 15 مثلا لذلك لا يمكننا استخدامها بهذا النوع من المشاكل , صحيح انه لم تأخذ وقت وخطوات كثيرة ولكنها في النهاية اعطتنا نتيجة خاطئة لذلك يمكننا استخدامها في المثال التالي مثلا : لنفترض انه لديك 3 خيارات للوصول الى المدرسة والتي هي الدراجة - السيارة - سيرا على الاقدام ماهي الطريقة الاسرع للوصول الى المدرسة algorithmic solutions : سيقوم بحساب سرعة كل وسيلة ويستخدم قوانين الفيزياء لحساب نتيجة اسرع طريقة heuristic solutions : سيعطيك نتيجة سريعة والتي هي السيارة لان السيارة هي الاسرع عادة وبالتالي اصبح الفرق واضح وبسيط بحيث ان الخوارزمية تستخدم للخطوات الدقيقة كالعمليات الرياضية بينما الهيورستيكية تستخدم التفكير المنطقي والتي يكثر استعمالها في تطوير نماذج الذكاء الصناعي وبالتوفيق لك ..
  17. ممكن مثال على كل طريقة من الواقع للتوضيح
  18. algorithmic solutions : تهدف الى إيجاد الحل الأمثل أو الصحيح للمشكلة التي تواجههنا من خلال كتابة خطوات منطقية ومحددة وكما ان الحلول هذه تعتبر دقيقة ومضمونة بينما heuristic solutions : هي طريقة للتوجيه او لوضع قواعد عامة تستخدم لحل هذه المشكلة ولا تهدف الى اتباع خطوات دقيقة كالالفوريثم وتهدف الى الوصول الى حل مقبول للمشكلة بسرعة وتكلفة اقل وقد تعطي نتائج اقل دقة من الالغوريثم ولكنها اكثر فعالية في في المشاكل الكبيرة والمعقدة التي قد تكون صعبة الحل بالطرق التقليدية باختصار، الحلول الألكوريتمية تركز على الدقة وتوفير الحل الأمثل، بينما الحلول الهيورستيكية تركز على السرعة والكفاءة في الوصول إلى حل مقبول أو جيد دون الحاجة إلى اتباع خطوات دقيقة. بالتوفيق لك
  19. ما هو الفرق بين heuristic, algorithmic solutions
  20. انا اريد حفظ اسم صورة في قاعدة بيانات وصورة في مجلد uploads هذا كود يحفظ صورة فقط ولكن لا يحفظ بيانات في قاعدة بيانات ممكن تعدل عليه <?php include('header.php'); ?> <!--------------------------------------------------------------------------------> <!------------------------------------header--------------------------------------> <!--------------------------------------------------------------------------------> <head> <!-- مكتبة SweetAlert2 --> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> <style> .rak { width: 400px; height: 300px; font-size: 14px !important; } </style> </head> <div class="col-md-9 pan1"> <ol class="breadcrumb" style="background-color: #fff;padding-top:8px;padding-bottom:8px;color:#000;font-size:16px;"> <li><a href="student.php">الطلبة</a></li> <li class="active">اضافة طالب جديد</li> </ol> </div> </div> <div class="row"> <?php // mysql_query("set character_set_server='utf8'"); // mysql_query("SET NAMES 'utf8'"); //get subjects data // $sql3 = mysqli_query($con, "select * from teachers"); // $sql1 = mysqli_query($con, "select * from departments"); //get student data $sql2 = mysqli_query($con, "select * from group_names"); //get class data // $sql3 = mysqli_query($con,"select * from class WHERE `stat`=1"); ?> <div class="col-md-9 pan1"> <div class="panel" style="color:#000;"> <div class="panel-body" style="font-size:14px; padding-left:40px;padding-right:40px;padding-bottom:25px;padding-top:25px;"> <form method="POST" enctype="multipart/form-data"> <div class="form-group" style="margin-top:10px;"> <label> رقم القيد </label> <input name="num_std" type="text" class="form-control" placeholder="قم بكتابة رقم القيد هنا "> </div> <div class="form-group" style="margin-top:10px;"> <label> أسم الطالب </label> <input name="name_std" type="text" class="form-control" placeholder=" الرجاء كتابة الاسم كامل "> </div> <div class="form-group"> <label>صورة للطالب</label> <input type="file" name="file" /> </div> <div class="form-group" style="margin-top:10px;"> <label> البريد الالكتروني </label> <input name="email_STD" type="email" class="form-control" placeholder=" الرجاء كتابة بريد الالكتروني "> </div> <div class="form-group" style="margin-top:10px;"> <label> كلمة السر </label> <input name="Pass" type="Password" class="form-control" placeholder=" الرجاء كتابة كلمة السر "> </div> <!-------------------------------------------------------------------------------------------------------------------------------> <!-------------------------------------------------------------------------------------------------------------------------------> <div class="form-group" style="margin-top:10px;margin-bottom:25px;"> <label> القسم </label> <select name="dept" class="form-control" style="height: auto;"> <?php while ($row_sub = mysqli_fetch_array($sql1)) { echo '<option value="' . $row_sub['id_dept'] . '">' . $row_sub['Name_dept'] . '</option>'; } ?> </select> </div> <div class="form-group" style="margin-top:10px;margin-bottom:25px;"> <label> المشرف </label> <select name="teah" class="form-control" style="height: auto;"> <?php while ($row_std = mysqli_fetch_array($sql3)) { echo '<option value="' . $row_std['id_teah'] . '">' . $row_std['Name_teah'] . '</option>'; } ?> </select> </div> <div class="form-group" style="margin-top:10px;margin-bottom:25px;"> <label> المجموعة </label> <select name="group_ID" class="form-control" style="height: auto;"> <?php while ($row_std = mysqli_fetch_array($sql2)) { echo '<option value="' . $row_std['id_group'] . '">' . $row_std['Name_group'] . '</option>'; } ?> </select> </div> <!-------------------------------------------------------------------------------------------------------------------------------> <!-------------------------------------------------------------------------------------------------------------------------------> <button name="submit" type="submit" class="btn-blue"> إضافة <span class="ion-android-add"></span></button> <button type="reset" class="btn-def"> إلغاء <span class="ion-android-delete"></span></button> </form> <?php // mysql_query("set character_set_server='utf8'"); // mysql_query("SET NAMES 'utf8'"); if (isset($_POST['submit'])) { $id_std = $_POST['num_std']; $full_name = $_POST['name_std']; $dept_std = $_POST['dept']; $email_STD = $_POST['email_STD']; $pass = $_POST['Pass']; $group = $_POST['group_ID']; // $id_teah = $_POST['teah']; // $image = $_FILES['file']['name']; $target = "../uploads/" . basename($image); $imageFileType = strtolower(pathinfo($target, PATHINFO_EXTENSION)); if (empty($id_std) or empty($full_name)) { echo "<div style='margin-top:10px;' class='text-center alert alert-danger' role='alert'><h3> الرجاء كتابة بيانات صحيحة </h3></div>"; echo '<meta http-equiv="refresh" content="4;url=student.php" />'; } else { if (filter_var($id_std, FILTER_VALIDATE_INT)) { $sql_std = "SELECT * FROM `student` where `Num_std`='$id_std' AND Name_std='$full_name'"; $query_std = mysqli_query($con, $sql_std); $count_std = mysqli_num_rows($query_std); if ($count_std == 0) { if ( $imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "الملفات المسموح بها فقط هي JPG, JPEG, PNG, GIF."; } else { if (move_uploaded_file($_FILES['file']['tmp_name'], $target)) { include('../config.php'); $sql = "INSERT INTO `student`(`Name_std`, `Num_std`, `Email_STD` , `Password`, `dept_ID`, `group_ID`,`id_teah`,`img_std`) VALUES ( '$full_name' , $id_std , '$email_STD' , '$pass' , $dept_std , $group,$id_teah,$target )"; // mysql_query("set character_set_server='utf8'"); // mysql_query("set names 'utf8'"); mysqli_query($con, $sql); echo "<script> Swal.fire({ title: 'رسالة تأكيد', text: 'تم إضافة بيانات الطالب بنجاح!', icon: 'success', customClass: 'rak', }); </script>"; // echo "<div style='margin-top:10px;' class='text-center alert alert-success' role='alert'><h3> تم اضافة الطالب بنجاح </h3></div>"; echo '<meta http-equiv="refresh" content="2;url=student.php" />'; } else { echo "<div style='margin-top:10px;' class='text-center alert alert-danger' role='alert'><h3> هذا الطالب موجود مسبقا </h3></div>"; } //echo $pass; } } else { echo "<div style='margin-top:10px;' class='text-center alert alert-danger' role='alert'><h3> يجب ان يكون رقم القيد ارقام وليس حروف </h3></div>"; echo '<meta http-equiv="refresh" content="50;url=student.php" />'; } } } } ?> </div> </div> </div> </div> <!--------------------------------------------------------------------------------> <!------------------------------------Footer--------------------------------------> <!--------------------------------------------------------------------------------> <?php include('footer.php'); ?>
  21. هي من ضمن المشاريع العملية بالطبع، وأية مشاريع عملية حتى لو بسيطة من الأفضل تسليمها، وذلك بإنشاء مجلد للدورة وتقسيمه إلى مجلدات بداخله بحيث يصبح لكل مسار مجلد باسمه، ونضع في ذلك المجلد التطبيقات العملية للمسار. ثم نرفع مجلد الدورة بالكامل إلى مستودع GitHub. لكن المشاريع العملية الكبيرة نضعها في مجلد خاص بها ثم نرفعها على مستودع GitHub خاص بها، أي مشروع مثل تطوير موقع أو تطبيق مثلاً.
  22. ماذا تقصد بإضافة صورة طالب ؟
  23. ياريت رد علي سؤال اضافة صورة طالب اخي خالد
  24. عند انشاء صفحة html تقومين بحفظها بامتداد .html على سبيل المثال index.html وبالتالي ستذهبين الى مسار هذا الملف وتقومين بفتحه بشكل طبيعي وسيفتح على المتصفح بحيث ان لغة ال html لا تحتاج الى سيرفر لتشغيلها ان قمت باتباع هذه الطريقة فستفتح الصفحة بشكل طبيعي على المتصفح الخاص بك وستظهر النتيجة ايضا ولكنك بحاجة الى تحديثها كلما اجريتي اي تحديثات على الكود الخاص بك لذلك نقوم بتثبيت اضافة live server ليتم تحديث الصفحة بشكل تلقائي كلما اجريتي تعديلات على الكود الخاص بك ولتثبيت هذه الاضافة اتبعي الخطوات التالية : اذهبي الى برنامج vsCode من الشريط الجانبي اختاري ايقونة الاضافات ثم قومي بالبحث على live server وقومي بتثبيت اول نتيجة الان اضغطي ب زر الفأرة الايمن بأي مكان داخل صفحة الhtml واقومي باختيار open with live server وسيفتح الان بشكل تلقائي في المتصفح الافتراضي للنظام وبما انك بدأتي بتعلم الhtml من جديد يمكنك الاستفادة من موسوعة حسوب الخاصة بدراسة ال html من هنا ومتابعة دروس ال html من هنا وبالتوفيق لك في مسيرتك الدراسية ..
  25. مرحبا اني مبتدأة بتعلم البرمجة وحاليا بدأت من الصفر ودأتعلم لغة ال html اللي احتاجه انه من دأشتغل ودأطبق وأريد التطبيق مالتي يظهر على المتصفح،لكن مديظهر، ونزلت ال live server وهم مكدرت أسويله extension وصارلي ٣ ايام على نفس الوضع ومدأكدر اسوي، ياريت بلا زحمة أحد يشاركني رأيه ويضيفلي مساعدة.
  26. يمكنك قراءة شروط التقدم للامتحان من هنا حيث أنه هناك شرط أن تكون مطبق المشاريع مع المدرب وللاستفسار أكثر يمكنك التواصل مع مركز الدعم الخاص بالأكاديمية من هنا وبالتوفيق لك...
  1. عرض المزيد
×
×
  • أضف...