لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 08/02/22 في كل الموقع
-
في كل مشروع لارافيل Laravel يوجد ملف env. ويحتوي على تفاصيل الإتصال بقاعدة البيانات ومعلومات أخرى عن المشروع، وفي الفترة الأخيرة بدأت بتعلم إستخدام phpunit وعمل إختبارات tests، ولكن واجهتني مشكلة وهي أني أريد أن أستخدم قاعدة بيانات مختلفة للإختبارات ولذلك علي أن أقوم بإستخدام ملف env. مختلف عن الملف الأصلي ليتم الإتصال بقاعدة بيانات الخاصة بالإختبارات. كيف أقوم بإستخدام ملف env. مختلف عند تشغيل الإختبارات في لارافيل Laravel؟2 نقاط
-
السلام عليكم لا اعرف كيف استمر على الاطلاق، اعمل بدوام كامل في محل لمدة 12 ساعه في اليوم وعندي يوم واحد اجازة. كل مرة انوي تعلم دروس في مجال البرمجه لا اكمل شهر وانقطع من كترة الارهاق ولا أجد نتيجة أبدا لاني كنت اذاكر ساعتين يوميا فلم اكن احس اني الساعتين لهم فائدة اصلا، فكنت محبط جدا. وكنت اريد اتعلم البرمجه كي تكون مصدر دخل جيد. هل من نصائح؟1 نقطة
-
انا عايز اعرف نظام التشغيل الي موجود في العربيات والساعات الذكيه والخ .... ازاي بتتعمل ولو حبيت اعمل نظام تشغيل خاص بي اي الحاجات الي ابقي محتاجها1 نقطة
-
هذه الأنظمة تسمى بالأنظمة المدمجة Embedded systems ويتم برمجتها من خلال لغة برمجة مثل C أو ++C أو Python، وتتكون هذه الأنظمة من جزئين Hardware و Software وفي كثير من الأحيان يتم إستعمال لوحات جاهزة مثل راسبيري باي أو أردينو في عمل هذه الأنظمة ويتم التحكم في هذه اللوحات من خلال لغات البرمجة التي أشرت إليها سابقًا. أنواع الأنظمة المدمجة: الأنظمة المدمجة المحمولة: أنظمة صغيرة الحجم كالكميرات الرقمية الأنظمة المدمجة المتصلة بالشبكة (Networked Embedded Systems): وهي انظمة تتصل بشبكة الانترنت لارسال او استقبال معلومات معينة كالهواتف المحمولة واجهزة الأمن المنزلي. الأنظمة المدمجة المستقلة (Standalone Embedded Systems): هذا النوع من الأنظمة المدمجة لا يعتمد على الشبكة, حيث يقوم بأداء مهامه بشكل مستقل كالالة الحاسبة. أنظمة الوقت الحقيقي: وهي الأنظمة المسؤولة عن انجاز مهام معينة خلال مدة زمنية محددة, غالبا ما تستخدم في المجالات الطبية والعسكرية وقطاع السيارات وخصوصا السيارات ذاتية القيادة, وفي الغالب يتم إستخدام لغات برمجة مثل C أو ++C في برمجة مثل هذه الأنظمة أيضًا ليس عليك أن تقوم ببرمجة نظام تشغيل كامل من البداية حيث يوجد الكثير من اللوحات الجاهزة والتي تحتوي على أنظمة تشغيل جاهزة للعمل وعليك أن تقوم ببرمجتها فقط لتحقق ما تريد فعله وستجد هنا مجموعة كبيرة من المقالات التي يمكنها مساعدتك في فهم الأنظمة المدمجة وكيفية إستعمال لوحات راسبيري باي.1 نقطة
-
أريد الحصول على كل محتوى ملف الترجمة بالكامل، بدلًا من كتابة كل مفتاح على حدى: $countries = Lang::get('countries'); $flags = Lang::get('flags'); // ... هل توجد طريقة للحصول على كل شيء موجود في ملف الترجمة دفعة واحدة في لارافيل Laravel؟1 نقطة
-
قمت بعمل مدونة بسيطة بإستخدام لارافيل Laravel، وفي كل منشور يوجد صندوق للتعليقات وبعض التعليقات من المستخدمين. أريد أن أقوم بعرض التعليقات الموجودة في المنشور في حالة كان الزائر مسجل في الموقع، وفي حالة لم يكن كذلك يتم عرض رسالة مكان التعليقات. كيف يمكنني التحقق مما إذا كان المستخدم مسجل في الموقع أم لا؟ وهل يجب أن أقوم بعمل ملف view كامل لعرضه في حالة كان المستخدم مسجل في الموقع وعرض ملف View آخر في حالة كان الزائر غير مسجل في الموقع أم توجد طريقة أفضل من هذا؟1 نقطة
-
انا بستخدم ReactJs ومعاها NodeJs هل اقدر اربط معاهم Django بلغه Python عشان استخدم مكاتبها + لو في طريقه ياريت حد يقولي ازاي او يعتلي لينك1 نقطة
-
يمكنك إستعمال React.js في الوجهة الأمامية frontend مع إستخدام Django في الواجهة الخلفية backend، ويتم الربط بينهما من خلال عمل API، وليس من المفترض أن تستخدم جانغو Django مع Node.js في نفس الوقت حيث يؤدي كلًا منهما نفس الغرض وهو توفير واجهة خلفية backend. أما إن كنت تريد أن تستخدم Node.js في الواجهة الخلفية backend في كل الموقع مع إستعمال Django في أجزاء معينة فقط فيمكنك القيام بذلك من خلال عمل API بجانغو Django ورفعه على خادم ما server واستخدام هذا ال API من داخل Node.js يمكنك قراءة الاجابات هنا لمعرفة ما هو api1 نقطة
-
السلام عليكم ورحمة الله وبركاته كيف حالكم كثير منا في العمل الحر يشتكي من تراكم الاعمال بشكل كبير سؤالي هو كيف تتعامل مع تراكم الاعمال الذي ياتيك هل تفوض بعض الاعمال وتقوم بشراء خدمات من باعة اخرين؟؟؟ انا اصمم مواقع الكترونية ويصدف ان ياتيني عدد كبير من العروض في وقت واحد وارفض بعضها خشية اني اذا وافقت قد لا يوافقك بائع مميز على هذا السعر الذي لدي واذا طلبت من بائع جديد الموقع قد يخربط الموقع ويصبح تقييمي سيئ اتمنى ان تشاركوني اراءكم في التعامل مع تراكم الاعمال1 نقطة
-
قيمة أقدم تاريخ تسجيل يجب أن تكون أول يوم من السنة الحالية، ما تمرره هو تاريخ اليوم الحالي لذا يجب استخدام التابع startOfYear لتمرير قيمة أول يوم من السنة الحالية كالتالي: $users = User::select('email')->whereDate('created_at', '>', now()->startOfYear())->count(); أو يمكن الاستفادة مباشرة من تابع الاستعلام whereYear وتمرير السنة التي نريد الاستعلام عنها لتصبح الشيفرة أوضح عند قراءتها كالتالي: $users = User::select('email')->whereYear('created_at', '=', now()->year)->count();1 نقطة
-
كطريقة تقليدية، يمكنك حقن عدد المستخدمين الاجمالي الى متغير وارساله الى ملف العرض كـ: // code from controller $users = User::paginate(10); $users_count = User::count(); return view('users.index', compact('users' ,'users_count')); ثم طباعته كـ: {{ $users_count }} كطريقة اكثر اختصارا يمكنك الاستعانة بمتغيرات التصفيح pagination variables وتوابعه لخدمة هذا الغرض. يوجد التابع total الذي يعطي العدد الاجمالي للعناصر: {{ $users->total() }} اعرف أكثر عن ترقيم الصفحات Pagination في Laravel1 نقطة
-
هل جربت استعمال اضافة Easy Digital Downloads لبيع المنتجات الرقمية المدفوعة والمجانية؟ رغم الميزات التي تعرضها الا ان الاضافة مدفوعة ولا تتوفر بشكل مجاني. يوجد أيضا اضافة ebook store أظن انها تمتلك خيارا لبيع الكتب المجانية. وكاضافة تختص بعرض وتنزيل الكتب المجانية بشكل كامل توجد اضافة Ebook Downloader .يمكن المستخدمين من تحميل الكتب الإلكترونية في النظام دون الحاجة الى تسجيل الدخول إلى النظام. ذكرت انك تمتلك بالفعل نظاما يعرض كتبا للبيع واخرى مجانية. ما هي الاضافة التي استعنت بها على ذلك؟ يمكنك التبديل الى اخرى اكثر خدمة لهذا الغرض1 نقطة
-
يمكنك أن تستخدم forlopp.counter مع المرشح divisibleby على النحو التالي: {% for count in my_list %} {% if forloop.counter|divisibleby:2 %} <p>do something</p> {% else %} <p>do something else</p> {% endif %} {% endfor %} شرح المرشح divisibleby: أيضًا تستطيع أن تستعمل cycle: {% for count in my_list %} {% cycle 'odd' 'even' %} {% if cycle == 'odd' %} <p>do something</p> {% else %} <p>do something else</p> {% endif %} {% endfor %}1 نقطة
-
كلا التقنيتين مستعمل على نطاق واسع عالميًا ويوجد العديد من الشركات والآلاف من الأشخاص الذين يستخدمون هذه التقنيات، ولكن ستجد في الوطن العربي أن أستعمال لغة PHP أكبر بكثير من باقي التقنيات، وذلك بسبب إستخدام WordPress ولارافيل Laravel على نطاق واسع، ويمكنك التأكد من ذلك من خلال تصفح المشاريع في مواقع العمل الحر مثل خمسات ومستقل، ولكن هذا لا يمنع أن Node.js مستعملة أيضًا. هنا بعض المساهمات المشابهة:1 نقطة
-
قد لا نحتاج إلى هذا المقال في أغلب التطبيقات التي نكتبها، إذ إنه موضوع متقدم في البرمجة (خصوصًا في مراحل تعلم البرمجة الأولى)، وسنعرضه هنا لمجرد الدراسة واحتمال احتياجه في مشروع ما، ولا تقلق إذا وجدت أن عناصره صعبة الفهم. سنشرح في هذا المقال ما يلي: تعريف التعاودية، وكيفية عملها. كيف تساعد التعاودية في تبسيط بعض المشاكل الصعبة. تعريف التعاودية رغم قولنا سابقًا إن الحلقات التكرارية loops هي إحدى ركائز البرمجة، إلا أنه يمكننا كتابة برامج كاملة دون استخدام صريح لهذه البنية، بل إن بعض اللغات مثل Scheme لا تحوي بنية حلقة تكرارية صريحةً مثل For وWhile وغيرهما، وإنما تستخدم تقنيةً تسمى التعاودية، وقد تبين أن هذه التقنية قوية للغاية في حل بعض أنواع المشاكل، وهي تعني تطبيق دالة كجزء من تعريف نفس الدالة، ولننظر مثالًا على ذلك أحد الاختصارات التعاودية المشهورة في الكلمات، وهو أحد أساليب التلاعب بالاختصارات يحتوي الاختصار نفسه على كلمة تطابق حروف الاختصار، مثل مشروع GNU مثلًا -وهو أحد أهم المشاريع في البرمجيات مفتوحة المصدر- والذي تشير حروف كلمته إلى "نظام GNU ليس يونكس" أو GNU's Not UNIX، فتكون اختصارًا تعاوديًا لأن كلمة GNU التي في الاختصار هي نفسها كلمة GNU المختصرة كلها، أما معنى الكلمة الحرفي فهو حيوان الثور الإفريقي. ويجب أن يوجد في الدالة شرط إنهاء، بحيث تتفرع الدالة إلى حل غير تعاودي عند نقطة ما، على عكس مثال GNU الذي ليس فيه هذا الشرط ويظل يتعاود إلى ما لا نهاية، وهو ما نطلق عليه الحلقة اللانهائية infinite loop. لننظر هنا في مثال بسيط، تُعرَّف فيه دالة المضروب الرياضي factorial function المشار إليها بعلامة التعجب بعد العدد n!، على أنها ناتج ضرب جميع الأعداد من الواحد حتى العدد المطلوب -بما في ذلك العدد نفسه-، ومضروب الصفر هو الواحد، فإذا أردنا التعبير عن هذا المثال بطريقة أخرى فسنقول إن مضروب N يساوي (N(N-1، وعليه سيكون: 1! = 1 2! = 1 x 2 = 2 3! = 1 x 2 x 3 = 2! x 3 = 6 N! = 1 x 2 x 3 x .... (N-2) x (N-1) x N = (N-1)! x N ويمكن التعبير عن ذلك في بايثون كما يلي: def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) يجب أن تنتهي الدالة بما أننا نقلل قيمة N في كل مرة ونتحقق هل تساوي 1 أم لا، لكن ثمة مشكلة بسيطة في هذا التعريف، إذ سيدخل في حلقة لا نهائية إذا استدعيناه برقم سالب، ولحل هذا نضيف اختبارًا للتحقق من أن n أقل من صفر، ويعيد None إذا كان كذلك لأن مضروب العدد السالب غير معرَّف undefined. يظهر هذا مدى سهولة ارتكاب أخطاء في شروط الإنهاء، وهي أشهر حالة للزلات البرمجية bugs في الدوال التعاودية، إذ يجب أن نتأكد من اختبار جميع القيم حول حالة الإنتهاء لضمان التنفيذ الصحيح. لنرى الآن كيف يكون هذا عند تنفيذه، لاحظ أن تعليمة الإعادة تعيد * n (نتيجة استدعاء المضروب التالي)، فنحصل على ما يلي: factorial(4) = 4 * factorial(3) factorial(3) = 3 * factorial(2) factorial(2) = 2 * factorial(1) factorial(1) = 1 وتعود بايثون أدراجها لتستبدل القيم كما يلي: factorial(2) = 2 * 1 = 2 factorial(3) = 3 * 2 = 6 factorial(4) = 4 * 6 = 24 ليس من الصعب كتابة دالة مضروب دون استخدام التعاودية، ويمكنك تجريب هذا، إذ يجب أن تمر على جميع الأعداد حتى N؛ وتنفذ عمليات ضرب أثناء ذلك المرور التكراري، لكن قد يصعب كتابة بعض الدوال دون التعاودية، كما سنرى أدناه. التعاودية على القوائم إحدى الحالات التي تكون التعاودية مفيدةً فيها هي معالجة القوائم Lists، بشرط أن نستطيع التحقق من فراغ القائمة، وتوليد قائمة دون عنصرها الأول، ونفعل هذا في بايثون باستخدام تقنية تسمى التشريح Slicing، لكن كل ما يجب معرفته في هذا الفصل هو أن استخدام فهرس [1:] يعيد جميع العناصر من العنصر ذي الفهرس 1 حتى نهاية القائمة، لذا نكتب ما يلي لنصل إلى العنصر الأول من قائمة اسمها L: first = L[0] # استخدم الفهرسة العادية وللوصول إلى بقية القائمة: # استخدم التشريح للوصول إلى العناصر 1،2،3 وما بعدها butfirst = L[1:] لنجرب ذلك في محث بايثون، لنتأكد أنه يعمل: >>> L =[1,2,3,4,5] >>> print( L[0] ) 1 >>> print( L[1:] ) [2,3,4,5] نعود الآن إلى استخدام التعاودية لطبع القوائم، ولنفرض حالةً نطبع فيها كل عنصر من قائمة سلاسل نصية باستخدام الدالة printList: def printList(L): if L: print( L[0] ) printList(L[1:]) إذا تحققت L -أي كانت true ولم تكن فارغةً- فسنطبع العنصر الأول، ثم نعالج بقية القائمة كما يلي: # شيفرة وهمية ليست بايثون PrintList([1,2,3]) prints [1,2,3][0] => 1 runs printList([1,2,3][1:]) => printList([2,3]) => we're now in printList([2,3]) prints [2,3][0] => 2 runs printList([2,3][1:]) => printList([3]) => we are now in printList([3]) prints [3][0] => 3 runs printList([3][1:]) => printList([]) => we are now in printList([]) "if L" is false for an empty list, so we return None => we are back in printList([3]) it reaches the end of the function and returns None => we are back in printList([2,3]) it reaches the end of the function and returns None => we are back in printList([1,2,3]) it reaches the end of the function and returns None لاحظ أن الشرح أعلاه مأخوذ من شرح في نشرة تعليم بايثون البريدية بواسطة Zak Arnston بتاريخ يوليو 2003. يسهل تنفيذ هذا الأمر لقائمة بسيطة باستخدام حلقة for، لكن ماذا لو كانت القائمة معقدةً وتحتوي قوائم أخرى فيها، فإذا استطعنا التحقق من كون عنصر ما قائمةً باستخدام دالة type() المضمنة وكان قائمة حقًا؛ فسنستدعي printList() تعاوديًا، أما إن لم يكن قائمةً فنطبعه: def printList(L): # لا تفعل شيًا إن كانت فارغة if not L: return # على العنصر الأول printList إذا كانت قائمة فاستدع if type(L[0]) == list: printList(L[0]) else: # لا توجد قوائم لذا نطبع هنا print( L[0] ) # L نعالج بقية عناصر printList( L[1:] ) سيصعب تنفيذ ذلك باستخدام الحلقة التكرارية العادية، ويظهر الفرق مع استخدام التعاودية في تسهيل ذلك التنفيذ، لكن ثمة مشكلة هنا، فالتعاودية على بنى البيانات الكبيرة يستهلك الذاكرة كثيرًا، لذا عند وجود ذاكرة صغيرة أو بنى بيانات كبيرة لمعالجتها، فيجب تفضيل الشيفرة المعتادة للأمان، وبسبب مشكلة الذاكرة تلك واحتمال أن يتعطل المفسر interpreter بسببها فقد وضعت بايثون حدًا لعدد مستويات التعاودية التي تسمح بها، فإذا تجاوزنا ذلك الحد فسيُنهى برنامجنا مع خطأ RecusrionError، والذي نلتقطه باستخدام try/except: >>> def f(n): return f(n+1) نلاحظ أن سبب هذه الحالة هو عدم وجود شرط إنهاء، لكن يجب أن تكون مجموعةً كبيرةً من بيانات الدخل كافيةً لإطلاقها حتى في الدوال المكتوبة بإتقان، وهنا يكون الحل الوحيد هو إعادة الكتابة مرةً أخرى باستخدام الحلقات التكرارية المعتادة، وهذا ممكن دومًا مهما بدا صعبًا. جافاسكربت ولغة VBScript تدعم كل من لغة جافاسكربت ولغة VBScript التعاودية، لكن بما أننا ذكرنا كل شيء تقريبًا فسنتركك مع نسخة تعاودية من دالة المضروب للغتين: <script type="text/vbscript"> Function factorial(N) if N < 0 Then Factorial = -1 'a negative result is "impossible" if N = 0 Then Factorial = 1 Else Factorial = N * Factorial(N-1) End If End Function Document.Write "7! = " & CStr(Factorial(7)) </script> <script type="text/javascript"> function factorial(n){ if (n < 0) return NaN // NaN - Not a Number - يعني أنه غير صالح if (n == 0) return 1; else return n * factorial(n-1); }; document.write("6! = " + factorial(6)); </script> لننظر الآن في البرمجة الدالية Functional Programming (أو البرمجة الوظيفية) في الفصل التالي. خاتمة نأمل بنهاية هذا الفصل أن تكون تعلمت ما يلي: تستدعي الدوال التعاودية نفسها من داخل تعريفها. يجب أن تحتوي الدوال التعاودية على شرط إنهاء غير تعاودي نصل إليه في النهاية، وإلا فسنقع في حلقة لا نهائية من التكرار. التعاودية مستهلكة للذاكرة عادةً، لكن ليس في كل الحالات. ترجمة -بتصرف- للفصل العشرين: Recursion, or doing it to yourself، من كتاب Learn To Program لصاحبه Alan Gauld. اقرأ أيضًا المقال التالي: مقدمة إلى البرمجة الوظيفية Functional Programming المقال السابق: برمجة الواجهات الرسومية باستخدام Tkinter التعاود recursion والمكدس stack في جافاسكربت التعاود recursion في جافا مفهوم التعاود (Recursion) والكائنات القابلة للاستدعاء (Callable Objects) في Cpp1 نقطة
-
في هذا الجزء من المقالات التعليمية، نتطرَّق إلى لغة JavaScript كما هي بدون تعديلات خاصة بالبيئة. لكن ما زلنا نستخدم المتصفح كبيئة تجريبية، لذلك يجب أن تتعرف على عددٍ قليلٍ من دوال واجهة المستخدم الخاصة به. ستتعرف في هذا الفصل على هذه الدوال التفاعلية الخاصة بالمتصفح. الدالة alert الصياغة: alert(message); تعرض هذه الدالة رسالة نصية وتوقف تنفيذ السكربت مؤقتًا حتى يضغط المستخدم على «موافق» (OK). إليك الشيفرة البسيطة التالية مثلًا: alert("مرحبًا"); تسمى الرسالة النصية التي تظهر على شكل نافذة صغيرة تدعى «النافذة المنبثقة الشرطية» (modal window، وهي عنصر تحكم رسومي)؛ تعني كلمة «شرطية» أنه لا يمكن للزائر التفاعل مع بقية الصفحة، أو الضغط على أزرار أخرى وما إلى ذلك، إذ تشترط عليه التفاعل معها فقط، أي حتى يضغط على «موافق» (Ok) في هذه الحالة. الدالة prompt تقبل الدالة prompt وسيطين (arguments) لتكون صياغتها بالشكل التالي: result = prompt(title, [default]); تعرض هذه الدالة نافذة منبثقة شرطية مع رسالة نصية مخصصة، وحقل إدخال للمستخدم، وزرَّين (موافق [OK] وإلغاء [CANCEL]). الوسيط title: هو عبارة عن النص الذي سيعرض للمستخدم. الوسيط default: هو وسيط اختياري يمثِّل القيمة الأولية لحقل الإدخال الخاص بالمستخدم. قد يكتب المستخدم شيئًا ما في حقل الإدخال، ثمَّ يضغط على موافق (Ok). أو يمكنه إلغاء الإدخال عند الضغط على إلغاء (CANCEL) أو الضغط على مفتاح الهروب (Esc). استدعاء الدالة prompt يرجع سلسلة نصية تمثِّل القيمة التي أدخلها المستخدم في حقل الإدخال أو يرجع القيمة null إذا تم الخروج من النافذة وإلغائها. جرب نفِّذ المثال التالي في الطرفية وعدل عليه: let age = prompt('كم عمرك؟', 100); alert(`عمرك ${age} سنة!`); في IE (أي المتصفح Internet Explorer)، دائمُا ما يتم إضافة الوسيط default. أي هذا الوسيط اختياري في جميع المتصفحات باستثناء المتصفح IE الذي يعدُّه اجباريًّا، وإذا لم نحدِّد قيمته، يفترض المتصفح Internet Explorer أنَّ قيمته "undefined". نفِّذ هذه الشيفرة في متصفح Internet Explorer لرؤية الناتج: let test = prompt("Test"); لجعل الدالة prompt تعمل جيدًا في المتصفح IE، نوصي دائمًا بتمرير قيمة الوسيط الثاني default: let test = prompt("Test", ''); // <-- IE للمتصفح الدالة confirm الصياغة: result = confirm(question); تُظهر الدالة confirm نافذة منبثقة شرطية تحتوي على سؤال question، وزريّن (موافق [OK] وإلغاء [CANCEL]). تكون النتيجة true إذا ضغط المستخدم على الزر "Ok" وتكون false عدا ذلك. جرِّب المثال التالي في طرفيتك: let isBoss = confirm("Are you the boss?"); alert( isBoss ); الخلاصة ذكرنا في هذا المقال ثلاثة دوال للتفاعل مع مستخدمي الموقع وهي: الدالة alert: تعرض رسالة لإعلام المستخدم بشئ ما، وُتعطل كافة عمليات الصفحة حتى يتفاعل مع هذه الرسالة. الدالة prompt: تعرض رسالة تطلب من المستخدم إدخال شيء ما في حقل إدخال خاص لتعيد القيمة المدخلة في سلسلة نصية، أو ترجع القيمة null إذا تم العملية. الدالة confirm: تعرض رسالة (بمثابة سؤال) وتنتظر من المستخدم الرد عليها بالقبول أو الرفض، أي تكون النتيجة true إذا تم الضغط على زر "Ok" أو تكون false عدا ذلك. كل هذه الدوال مشروطة: فهي تتوقف عن تنفيذ السكربت ولا تسمح للمستخدم بالتفاعل مع بقية الصفحة حتى يتم التفاعل مع النافذة التي تعرضها. هناك اثنين من القيود التي تشترك بها جميع الدوال المذكورة أعلاه: يحدد المتصفح الموقع الذي ستظهر فيه النافذة، وعادة ما يكون في الوسط أو الأعلى. يعتمد شكل النافذة أيضًا على المتصفح، ولا يمكننا تعديله. هذا هو ثمن البساطة. هناك طرق أخرى لإظهار نوافذ أكثر جمالًا وفاعلية، ولكن إذا كانت التنسيقات الجمالية غير مهمة، فهذه الدوال تفي بالغرض. .task__importance { color: #999; margin-left: 30px; } .task__answer { border: 3px solid #f7f6ea; margin: 20px 0 14px; position: relative; display: block; padding: 25px 30px; } code { background-color: rgb(250, 250, 250); border-radius: 3px; } تمارين صفحة بسيطة الأهمية: 4 قم بإنشاء صفحة ويب تطلب اسمًا ما ثم تعرضه. الحل شيفرة JavaScript: let name = prompt("ما اسمك؟", ""); alert(name); الشيفرة كاملة: <!DOCTYPE html> <html> <body> <script> 'use strict'; let name = prompt("ما اسمك؟", ""); alert(name); </script> </body> </html> ترجمة -وبتصرف- للفصل Interaction: alert, prompt, confirm من كتاب The JavaScript Language اقرأ أيضًا المقال التالي: المعاملات الشرطية المقال السابق: معاملات الموازنة كامل مقالات دليل تعلم جافاسكربت1 نقطة