-
المساهمات
8752 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
117
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو محمد_عاطف
-
ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
- 1 جواب
-
- 1
-
-
أولا لاحظ أنك تضع break مباشرة في بداية الحلقة دون أى شرط وهذا خاطئ حيث سيتم إيقاف الحلقة عند أول تكرار ولن يتم الإكمال. ثانيا أنت تريد طباعة جميع العناصر ما عدا mango ولهذا نحن لا نحتاج break فمثلا لو mango كما هنا في العنصر الثالث فلو إستخدمنا break فلن يتم طباعة العنصر الرابع ولو يوجد عناصر أخرى بعدها لن يتم طباعتها لتوقف الحلقة. لذلك الحل هو وضع شرط للتأكد من أن العنصر لا يساوي mango هكذا : fruit = ['orange', 'banana', 'mango', 'lemon '] for x in range(len(fruit)): if fruit[x] != "mango": print (fruit[x])
-
أنت تقوم بتشتيت نفسك هكذا . يجب عليك تحديد إطار عمل واحد فقط سواء React أو Angular وتعلمه ومن ثم إتقانه وبعد ذلك يمكنك مستقبلا الإنتقال إلى أى إطار أعمل أخر عند حصولك على خبرة جيدة. ولكن يجب حاليا التركيز على إطار واحد لتفادي التشتت وأيضا لتفادي إختلاف الهيكل والإستخدام والتركيز على إنشاء مشاريع كبيرة بإطار واحد. ولا يمكن الجزم بأن أحدهما أفضل بشكل مطلق من الأخر لأن لكل منهما إستخدامات مختلفة: ف React : مرن وسهل التكامل ويستخدم لتطوير واجهات المستخدم (UI) فقط، لذا تحتاج إلى اختيار أدوات أخرى مثل Redux لل state management و React Router للتنقل. يعتمد على JavaScript/JSX حيث ينمنك كتابة المكونات باستخدام JSX وقد تكون أكثر سهولة للمبتدئين. مجتمع ضخم ويحوي عدد كبير من الحلول الجاهزة والمكتبات المساعدة. أما Angular: فهوإطار متكامل (Full Framework) ويحتوي على كل ما تحتاجه سواء Routing أو HTTP أو Client أو Formsوغيرها دون الحاجة إلى مكتبات خارجية. يعتمد أيضا على TypeScript ففو يفضل للشركات والمشاريع الكبيرة بسبب التنظيم والقوة في اكتشاف الأخطاء . صعب في التعلم قليلا بسبب مفاهيمه المعقدة مثل Dependency Injection و Modules و Decorators.
-
أولا دالة filter() تستخدم لتصفية وترشيح عناصر المصفوفة بناء على شرط معين وتعيد مصفوفة جديدة تحتوي فقط على العناصر التي تحقق الشرط وهذا هو هيكل الدالة : const newArray = array.filter((element) => { return condition; // إذا كانت القيمة true ضاف العنصر للمصفوفة الجديدة }); حيث : element: العنصر الحالي في المصفوفة. condition: الشرط الذي يجب أن يحققه العنصر ليبقى في المصفوفة الجديدة. إليك مثال لتصفية الأعداد الأكبر من 5 : const numbers = [1, 6, 3, 8, 2, 9]; const filteredNumbers = numbers.filter((num) => num > 5); console.log(filteredNumbers); // [6, 8, 9] الناتج هو مصفوفة جديدة تحتوي فقط على الأعداد الأكبر من 5. أما دالة match() تستخدم مع النصوص (Strings) للبحث عن تطابق مع نمط معين مثل تعبير عادي أو نص عادى أو حتى Regular Expression. فمثلا نريد استخراج الأرقام من نص ما : const text = "Age: 25, Height: 180cm"; const numbers = text.match(/\d+/g); console.log(numbers); // ["25", "180"] هنا الناتج هو مصفوفة تحتوي على جميع الأرقام الموجودة في النص. وإليك تفاصيل أكثر حولهم : filter match
-
أولا بالنسبة إلى الدالة reduce() فهي تستخدم لتجميع القيم في مصفوفة وإرجاع قيمة واحدة فقط. فمثلا إذا كان لدينا مصفوفة تحتوي على أرقام يمكن استخدام reduce() لجمع جميع تلك الأرقام في المصفوفة: const numbers = [1, 2, 3, 4, 5]; const sum = numbers.reduce(function(total, number) { return total + number; }, 0); console.log(sum); // Output: 15 حيث تأخذ الدالة reduce() معاملين أساسيين: أولا دالة التجميع (Reducer Function) وهي الدالة التي تنفذ على كل عنصر في المصفوفة. والثاني هو القيمة الابتدائية (Initial Value) وهو اختياري وتستخدم كقيمة أولية للحساب. ويمكنك قراءة المزيد حولها من خلال التالي : https://wiki.hsoub.com/JavaScript/Array/reduce أما بخصوص الكود المرفق : فإن this.myArr هي المصفوفة التي نريد جمع عناصرها. و (num1, num2) => num1 + num2 هنا : num1 هنا تمثل المجموع الكلي الحالي (القيمة المتراكمة). num2 تمثل العنصر الحالي في المصفوفة. حيث الدالة تقوم بجمع num1 و num2 في كل خطوة حتى تنتهي من جميع العناصر. مثال توضيحي بالأرقان لنفترض أن : this.myArr = [1, 2, 3, 4]، سيعمل الكود كالتالي: يأخذ العنصر الأول (1) كقيمة ابتدائية لـ num1. ثم يضيف num1 + num2 في كل خطوة: الخطوة 1: 1 + 2 = 3 الخطوة 2: 3 + 3 = 6 الخطوة 3: 6 + 4 = 10 النتيجة النهائية: 10
-
أولا في هذا الكود نقوم بتعريف دالة Function تسمى getProducts ووظيفتها الرئيسية هي جلب المنتجات من الإنترنت (API) وعرضها لديك في التطبيق. في methods في Vue.js هو عبارة عن كائن (Object) يحتوي على كل الدوال (functions) اللتي يمكنك إستخدامها في المكون الحالي و getProducts هي دالة قمنا بتعريفها لنستطيع إستخدامها في المكون لدينا . قمنا بإستخدام async وهي تعني إن الدالة غير متزامنة (Asynchronous) لنستطيع إستخدام await مع fetch هنا . وقمنا هنا بإستخدام fetch لإرسال الطلب API إلى العنوان ومن ثم إستخدمنا then لنقوم بتحويل الرد الذي أرسل إلينا من الطلب إلى كائن json . وبعد تحويله إلى json إستخدمنا then نقوم بوضعه في المتغير (أو الخاصية) التي إسمها products وهكذا نستطيع عرضها في المكون لدينا. إذا الكود هنا يرسل طلب API لإحضار قائمة بالمنتجات . ونقوم بالإنتظار حتي يعدي الطلب البيانات لنا .ونقوم بتحويلها لصيغة json لنتعامل بها بسهولة. وأخيرا مخزن تلك البيانات في الخاصية لديك في المكون لنستطيع إستخدامها.
-
الخاصية v-model في Vue تستخدم لربط البيانات بين واجهة المستخدم والمكون بشكل ثنائي الاتجاه (Two-way binding). فهنا v-model تقوم بربط قيمة حقل الإدخال <input> بالمتغير email الموجود في البيانات (data) داخل مكون Vue.أى عندما يقوم المستخدم بكتابة شيئ داخل الحقل تتغير قيمة email تلقائيا في البيانات. وإذا قمت بتعديل ال email في الكود داخل المكون فإن قيمة الحقل في الصفحة ستتغير تلقائيا لتظهر في الحقل. فمثلا لنفرض الكود التالي : <div id="app"> <label>Email:</label> <input v-model="email" type="email"> <p>Email That User Enter: {{ email }}</p> </div> <script> const app = Vue.createApp({ data() { return { email: '' } } }); app.mount('#app'); </script> فهنا كلما قام المستخدم بكتابة أى شئ في الحقل يتم تحديث email تلقائيا .و{{ email }} تقوم بعرض القيمة في الصفحة مباشرة مما يجعل التحديث يظهر مباشرة في الصفحة كلما قان المستخدم بكتابة شئ. الخلاصة أن v-model="email" تجعل <input> و المتغير email متصلين ببعض إذا تغير أحدهما يتغير الآخر بشكل تلقائي.
-
السبب الرئيسي في كيفية تعامل JavaScript و TypeScript مع الأنواع (Types). فإن JavaScript هي لغة برمجة ذات أنواع ديناميكية (dynamically typed) وهذا يعني أنك لست بحاجة لتحديد نوع المتغير عند تعريفه ويمكن للمتغير أن يحمل أنواعا مختلفة من البيانات خلال فترة تشغيل البرنامج. ففي مثالك عندما تكتب let numbers = [1,2,3,4,5]; يتعرف JavaScript على numbers في البداية كمصفوفة من الأرقام. وعندما تكتب numbers = 'Hello World'; يسمح JavaScript بتغيير نوع numbers من مصفوفة إلى سلسلة نصية دون أي مشكلة لأنها تتكيف مع النوع الجديد وليست ثابته على نوع واحد. أما TypeScript فهي تضيف ميزة الأنواع الثابتة (statically typed) وهذا يعني أن TypeScript يحاول معرفة نوع المتغير في وقت التحويل البرمجي (compile time) ويفرض هذا النوع وهذا يساعد على اكتشاف الأخطاء المحتملة قبل تشغيل الكود. فهنا في المثال لديك عندما تكتب let numbers = [1,2,3,4,5]; يقوم TypeScript باستنتاج النوع (Type Inference) ويحدد أن نوع المتغير numbers هو number[] أي مصفوفة من الأرقام. وعندما تحاول بعد ذلك كتابة numbers = 'Hello World'; يقوم TypeScript بفحص هذا التعيين ويكتشف أنك تحاول تعيين سلسلة نصية (string) لمتغير تم تحديده مسبقًا على أنه مصفوفة أرقام number[] وهذا تناقض في الأنواع ولذلك يظهر خطأ.
-
$emit هي طريقة في Vue نستخدمها لإرسال (emit) حدث مخصص من مكون إبن (Child Component) إلى المكون الأب (Parent Component). وتستخدم هذه الطريقة عندما يحتاج المكون الإبن إلى إبلاغ أو إرسال رسالة أو حدث للمكون الأب عند حدوث شيء معين مثل نقر زر في المكون الإبن وتنفيذ شئ ما في المكون الأب. حيث المكون الإبن لا يمكنه تعديل بيانات الأب مباشرة لذلك نرسل حدث أو رسالة إلى المكون الأب باستخدام $emit والأب يستمع لهذا الحدث وينفذ الكود الذي حددناه. إليك المثال التالي: ملف المكون الإبن : <template> <button @click="notifyParent">Click</button> </template> <script> export default { methods: { notifyParent() { this.$emit('my-event', 'Hello From Child'); } } } </script> هنا يتم إرسال حدث اسمه "my-event" مع قيمة (payload) وهي "Hello From Child". الآن في المكون الأب : <template> <ChildComponent @my-event="handleEvent" /> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, methods: { handleEvent(message) { console.log(message); // هنا سيتم طباعة الرسالة التي أرسلناها من المكون الإبن } } } </script> ويمكنك إرسال أكثر من قيمة إذا أردت هكذا : this.$emit('event-name', { id: 5, text: 'Mohamed' }); غذا نستخدم emit عندما نريد أن يتفاعل المكون الأب مع شيء حدث داخل المكون الإبن مثل الضغط على زر أو إدخال بيانات أو اختيار من قائمة أو إرسال نموذج . إليك مثال اخر لتطبيق toDoList حيث مثلا نريد عند الضغط على زر حذف نحذف المهمة . فمثلا في المكون الإبن : <template> <div class="todo-item"> <span>{{ task }}</span> <button @click="deleteTask">Delete</button> </div> </template> <script> export default { props: ['task', 'index'], methods: { deleteTask() { this.$emit('delete-task', this.index); } } } </script> وفي المكون الأب : <template> <div> <h2>List Items</h2> <TodoItem v-for="(task, i) in tasks" :key="i" :task="task" :index="i" @delete-task="removeTask" /> </div> </template> <script> import TodoItem from './TodoItem.vue'; export default { components: { TodoItem }, data() { return { tasks: ['Playing', 'Write', 'Read'] }; }, methods: { removeTask(index) { this.tasks.splice(index, 1); } } } </script> هنا عند استلام الحدث delete-task، يتم تنفيذ دالة removeTask لحذف المهمة من المصفوفة.
-
هناك بعض القوانين الصارمة التي تمنع توظيف الأطفال (الأقل من 18 عام) حيث بغض النظر عن مستوى الخبرة أو الذكاء أو النضج فإن عمر 14 عام يعتبر صغيرا ولهذا القانون كما وضحت يمنع ذلك . ولذلك لن تجد شركات تقوم بتوظيف الأشخاص الأقل من 18 عاما وحتى مواقع العمل الحر تتطلب عند إنشاء حساب تأكيد هويتك ولهذا لن تستطيع تأكيدها قبل الوصول إلى 18 . ولو إفترضنا أنك إستطعت العمل في شركة فحينها لن يكون لديك أى حقوق حيث لن تقوم الشركة بتسجيلك ضمن موظفينها لأن القانون يمنع ذلك. أنصحك بما أنك صغير في السن حاليا أن تقوم بالتركيز على الدراسة والتدريب كثيرا وهكذا حينما تصل إلى السن المطلوب ستجد أنه لديك خبرة كبيرة تتخطى الأشخاص في سنك وحينها تستطيع الوصول إلى مراكز وظيفية أسرع .
-
نعم بالطبع يمكن إنشاء مشاريع كبيرة ومعقدة باستخدام Vue.js، ولكن اختيار الإطار المناسب من Vue.js أو React أو Angular يعتمد على عدة عوامل مثل المتطلبات الخاصة بالمشروع و حجم الفريق وطبيعة التطبيق. فإن Vue.js يتميز بالمرونة ويمكن استخدامه في مشاريع صغيرة أو كبيرة مع مكتبات مثل Vuex لإدارة الحالة وVue Router للتوجيهو يمكن تنظيم التطبيقات الكبيرة بشكل جيد فيه. ويدعم Vue.js نمط Component-Based Architecture أى المكونات (كما في React و Angular) مما يسهل تقسيم المشروع إلى مكونات قابلة لإعادة الاستخدام وهو أمر أساسي للمشاريع الكبيرة والمعقدة. وVue.js حاليا يقدم أداء جيد خصوصا مع Vue 3 وميزة Composition API والتي تتيح تنظيم أفضل للكود في التطبيقات الكبيرة. وهو أيضا يعتمد على Virtual DOM مثل React مما يضمن تحديثات سريعة في المتصفح. ولكن إن مجتمع Vue.js أصغر من مجتمع ال React أو Angular أى أنه ستجد دعم أقل من React و Angular فالمجتمع يتميز في كثرة الأشخاص به والذين يساعدون في حل المشاكل وطرحها ولهذا من الممكن أن تجد صعوبة قليلا في البحث فيما يخص Vue لصغر المجتمع الخاص به. وأيضا قد تجد موارد أقل مقارنة ب React، لكنها كافية لبعض المشاريع. لذلك يجب عليك تحديد ما الذي تريد فعله ؟ هل تريد العمل في وظائف عمل حرة ؟ أم تريد العمل في شركات ؟ أم الإلتحاق بفريق تطوير تعرفه للعمل معا على مشاريع ؟ بعد تحديد ذلك يمكنك البحث عن التقنية المنتشرة في ذلك الأمر فمثلا لو في وظائف العمل الحر ستجد أكثر المطلو React يمكنك البحث أيضا بنفسك لتحصل على الإجابة الصحيحة وتتأكد منها . وأيضا لو أردت في الشركات يمكنك البحث عن الوظائف في بلدك وأنظر أى التقنيات مطلوبة بكثرة . وفي النهاية يمكنك تحديد الإطار الذي تريد العمل به حيث جميعهم يستطيعون إنشاء مشاريع كبيرة.
-
نعم كما وضحت لك يجب على الأقل إتمام 4 مسارات للتقدم للإختبار . أى يمكنك تجاهل أى مسار تريده ولكن يجب إتمام 4 على الأقل. ويجب عليك معرفة أن vue بسيط ولهذا هو مناسب للمشاريع البسيطة وليس متداول بكثرة في سوق العمل مثل React. لهذا لا يجب عليك التوجه إلى الأبسط بل إلى التقنية التي تعطيك فرصة للعمل . تعلم vue أولا لبساطته ومن ثم يمكنك الدخول في React .
-
هل تقصد إختبار التقدم إلى الشهادة ؟ إذا كان كذلك فللأسف لن يمكن ذلك . حيث قبل التقدم للإختبار يجب على الأقل أن تكون قد أنهيت أربع مسارات بالتطبيق الخاص بهم مع المدرب . حيث عند إنهاء الدورة أو إكمال 4 مسارات يمكنك التحدث لمركز المساعدة وإخبارهم أنك تريد التقدم للإختبار وتوفير روابط المشاريع على github. ثم الإنتظار لبعض الوقت لحين مراجعة المشاريع وسيتم الرد عليكِ، وتحديد موعد لإجراء مقابلة، وبها يتم: إجراء محادثة صوتيّة لمدة 30 دقيقة يطرح المدرّب عليكِ أسئلة متعلّقة بالدورة والأمور التي نفّذتيها خلالها. يحدد لك المدرّب مشروعًا مرتبطًا بما قمتي به أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع إلى أسبوعين. إجراء محادثة صوتيّة أخرى لمدّة 30 دقيقة يناقش بها مشروعك وما نفذتيه وتُطرح أسئلة خلالها. وكما موضح في التعليمات فإنه سيتم إختبارك في المسارات التي أنهيتها من الدورة. وبما ان vue غير موجود بها فلن يمكن الإختبار فيه ولن يتم إحتسابه كأنه مسار . وهذا الأمر متوقع حيث أنك تحصل على شهادة بإتمام الدورة من الأكاديمية موثقة ولهذا فيجب أن يكون الإختبار في المواضيع التي توفرها الأكاديمية. وللمزيد يمكنك محادثة مركز المساعدة والإستفسار منهم. أما إذا كنت تقصد بعد الإنتهاء من الدورة تماما والحصول على الشهادة فنعم بالطبع يمكنك العمل على أى شئ تريده ولا يجب جعل الدورة فقط هي التي تحدد لك هذا.
-
إذا كنت تقصد تفعيل الوضع الداكن في الأكاديمية فهنا الأكاديمية لا توفر ذلك الأمر ولكن يمكنك إتباع الخطوات في الإجابات التالية للتغلب على هذا الأمر :
-
هذا لأنك تعمل على ملف vue وهذا الأمر يتطلب intellisense ليتم تفعيل الإكمال التلقائي الصحيح. يجب عليك تنزيل إضافة Vue - Official التالية لديك في vs code : https://marketplace.visualstudio.com/items?itemName=Vue.volar
-
لايوجد أى خطأ حيث الألوان الخاصة بالكود لديك هي خاصة بالثيمات فكل ثيم وكل نوع ملف يختلف فيه الألوان وليست ثابته . وإذا كان يوجد خطأ ستجد أسفل الكلمة خط أحمر أو تظهر خطأ في ال console لديك .
-
إذا كنت تقصد موسوعة حسوب فهذا هو الرابط : https://wiki.hsoub.com/ إذا لم تكن تلك هي ما تقصدها يرجى وضع سؤالك أسفل الدرس الذي تسأل عنه لنستطيع مساعدتك.
-
إذا كنت تنوي التخصص في مجال الذكاء الإصطناعي مباشرة فإن دورة "الذكاء الاصطناعي" كافية لك ويمكنك الإشتراك بها مباشرة وهي تلك الدورة : حيث يتم شرح فيها أولا أساسيات بايثون التي ستحتاجها للدخول إلى مجال الذكاء الإصطناعي أى لن تحتاج إلى شئ أخر معها حيث الدورة مصممة خصيصا للمبتدئين ولا تحتاج إى خبرة مسبقة في البرمجة. أما دورة بايثون فهي مناسبة للأشخاص الذين يريدون الدخول في مجال تطوير الويب بإستخدام بايثون أى بعد إنهائها ستصبح متخخص في الواجهات الخلفية بإستخدام لغة بايثون ويوجد في تلك الدورة نبذة بسيطة عن تحليل البيانات وعن كيفية ربط موقعك بالذكاء الإصطناعي أى أنها ليست متخصصة في هذا المجال . لذلك دورة الذكاء الإصطناعي فقط تكفي لك إذا أردت الدخول في مجال تحليل البيانات والذكاء الإصطناعي .
-
إن ال Debugger في جافا سكريبت هو أداة تساعدك في تتبع وتنقيح (تصحيح) الكود البرمجي خطوة بخطوة لتتبع الكود لديك وفهم ما يحدث بالضبط داخل هذا الكود، واكتشاف الأخطاء (bugs). حيث الكلمة المفتاحية debugger تستخدم داخل الكود وعندما يصل المتصفح إليها أثناء التنفيذ يتوقف الكود مؤقتًا ويفتح أدوات المطور (Developer Tools) في تبويب Sources تلقائيا، لتتمكن من: مشاهدة القيم الحالية للمتغيرات. التقدم خطوة بخطوة (Step over / Step into). فهم تسلسل التنفيذ. اكتشاف أي متغيرات غير صحيحة أو مشاكل في منطق الكود لديك. فمثلا : قم بفتح المتصفح ثم قم بالضغط على F12 لفتح Developer Tools ثم قم بالذهاب لتبويب Console وقم بوضع الكود التالي: function calculateTotal(price, tax) { const total = price + tax; debugger; // يتوقف هنا التنفيذ return total; } const result = calculateTotal(100, 20); console.log("Total:", result); وهنا سينفذ السطر const total = price + tax وعندما يصل إلى debugger; سيتوقف الكود مؤقتا. وسيتم فتح تبويب Sources تلقائيا في أدوات المطور. ويمكنك الآن: مشاهدة المتغيرات (مثل price, tax, total) الضغط على Step over أو Step into لمتابعة الكود خطوة بخطوة. فحص ال Call Stack والأحداث الجارية. وإليك الدرس التالي لمزيد من التفاصيل والشرح من خلال متصفح chrome :
-
هل تقصد إرسال بيانات من خلال الدالة fetch إلى API معين ؟ إذا كان الأمر كذلك فيوجد العديد من الطرق لذلك ولكن يجب أن يكون نوع الطلب هو POST لتستطيع إرسال البيانات . فأولا لو أردت إرسال البيانات كما لو أنك تقوم بإرسال نموذج form فمثلا لو أردت إرسال النموذج form من خلال ajax أو fetch دون الحاجة لإعادة تحديث الصفحة فيمكنك إستخدام FormData هكذا : const formData = new FormData(); formData.append('username', 'test'); formData.append('email', 'test@example.com'); fetch('https://api.example.com/register', { method: 'POST', body: formData }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); // أو response.text() حسب استجابة الخادم }) .then(data => { console.log('تم إرسال بيانات النموذج بنجاح:', data); }) .catch(error => { console.error('حدث خطأ أثناء إرسال بيانات النموذج:', error); }); فهنا كما لو انك قمت بعمل submit لنموذج form التالي ولكن من خلال الدالة fetch : <form method="POST" enctype="multipart/form-data"> <input type="text" name="username"> <input type="text" name="email"> </form> الطريقة الثانية إذا كان الخادم أو ال API يتوقع البيانات على هيئة json يمكنك إستخدام الكود التالي : const myData = { name: "Ahmed", age: 30, country: "EG" }; fetch('https://api.example.com/users', { method: 'POST', headers: { 'Content-Type': 'application/json' // مهم جدا للخادم لفهم أنك ترسل JSON }, body: JSON.stringify(myData) // تحويل الكائن إلى JSON string }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { console.log('تم إرسال البيانات بنجاح:', data); }) .catch(error => { console.error('حدث خطأ أثناء إرسال البيانات:', error); }); لاحظ كيف أنشأنا كائن يحوي البيانات وقمنا بتحويله إلى نص Json من خلال الدالة JSON.stringify وأرسلناه في ال body. والطريقة الأخيرة لو أردت فقط إرسال نص أى text عادي هكذا : const myTextData = "Hello from fetch"; fetch('https://api.example.com/message', { method: 'POST', headers: { 'Content-Type': 'text/plain' // تحديد نوع المحتوى كنص عادي }, body: myTextData }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.text(); }) .then(data => { console.log('تم إرسال النص بنجاح:', data); }) .catch(error => { console.error('حدث خطأ أثناء إرسال النص:', error); });
-
وعليكم السلام ورحمة الله وبركاته. الخطأ لديك بسيط ويجب عليك الإنتباه دائما إلى هذه المشكلة فهي شائعة. لاحظ هنا في الشرط أنت تستخدم علامتي إستفهام == مع ! وهنا يتم التحقق من مجموع الرقمين وأيضا يتم التحقق من نوعهم . أى هذا الشرط أنت تعني أنك تريد التحقق من النوع numberمثلا و numberوأن لا يساوا بعضهم البعض . وهنا لو لاحظت الدالة prompt تعيد الناتج كنص "string" ولكن مجموع n1 و n2 هو رقم (number) ولهذا فإن الشرط يتحقق دائما لأن النوعين ليسوا متساويين في ال input هو string والمجموع هو number . والحل الصحيح هو تحويل ال input إلى رقم ولتحويله إلى رقم أبسط طريقه هي وضع علامة + قبل النص وهنا قبل دالة prompt هكذا : // Fibonacci let n = 5; // number of input numbers let n1 = 0; let n2 = 1; for(let i=0; i<n; i++){ do{ input = +prompt(`${n1} - ${n2}`); }while(input !== n1+n2); n1 = n2; n2 = input; } والآن سيعمل معك.
-
ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
-
بعد فحص الكود توجد نسبة كبيرة في إكتشاف الغش وتوليد الكود بالذكاء الإصطناعي أو نسخ الأكواد من على الإنترنت والنسبة هي 65%. أيضا إليك الملاحظات التالية التي تدل على وجود إستخدام لأدوات الذكاء الإصطناعي : أولا تنسيق الكود منظم جدا وبتسلسل واضح وهذا الأمر شائع في الأكواد المولدة بالذكاء الإصطناعي. استخدام مكتبات متقدمة مباشرةمثل faiss و SentenceTransformer مع اختيار نموذج معروف وهو أمر شائع إستخدامه في توليد الإجابات. أيضا الكود ينقصه التعليقات التوضيحية ماعدا تعليق واحد "Here I used FAISS" وهذا قد يشير إلى توليد تلقائي أو كود تعليمي تم نسخه. أيضا تسمية المتغيرات بشكل منظم مثل preprocessed_input و user_embedding و recommended_books فهذا النوع من التسميات النظيفة شائع في نماذج الذكاء الاصطناعي. ولكن لا نستطيع التأكد بشكل قاطع 100% إذا كان الكود ناتج من الذكاء الإصطناعي.
-
لم يتم حذف أى قسم نهائيا من الدورة أو تغير أى شئ . أعتقد أنك تقصد مسار "الخوارزميات وبنى المعطيات" والمسار موجود لا توجد به مشكلة. ولكن توجد مشكلة في الدروس حيث مشكلة الحالية في موقع vimeo والذي يتم رفع عليه الدروس حيث يوجد عطل به عالميا . نعتذر لك عن هذا الأمر وسيتم حل المشكلة في أسرع وقت إن شاء الله لذلك يرجى الإنتظار قليلا إلى حين حل المشكلة. ولكن لا تقلق لم يتم حذف أى جزء من الدورة ولا يتم حذف أى دروس تماما وحينما يتم تحديث محتوي الدورة ستجد المسارات القديمة أسفل قسم "أرشيف المسارات الأقدم"
-
لا توجد أى مشكلة من جهتك . بل المشكلة الحالية في موقع vimeo والذي يتم رفع عليه الدروس حيث يوجد عطل به عالميا . نعتذر لك عن هذا الأمر وسيتم حل المشكلة في أسرع وقت إن شاء الله لذلك يرجى الإنتظار قليلا إلى حين حل المشكلة.
- 2 اجابة
-
- 1
-