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

لوحة المتصدرين

  1. Mustafa Suleiman

    Mustafa Suleiman

    الأعضاء


    • نقاط

      4

    • المساهمات

      13222


  2. Saleh Ragab

    Saleh Ragab

    الأعضاء


    • نقاط

      3

    • المساهمات

      1


  3. Ahmed Ebrahim11

    Ahmed Ebrahim11

    الأعضاء


    • نقاط

      3

    • المساهمات

      448


  4. Sadjed Nemli

    Sadjed Nemli

    الأعضاء


    • نقاط

      3

    • المساهمات

      1


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 04/25/23 في كل الموقع

  1. السلام عليكم ورحمة الله وبركاته كيف حالك يا أخي في الله ؟ في البداية أنا أستخدم محرر أكواد يدعى هرمش وهو موقع ورابطه كالتالي : https://harmash.com/algo-editor?file=/tutorials/programming/write/write-decimal-number أنا أريد أن أعرف لماذا عندما اكتب الكود الذي في الملف المرفق يظهر للمستخدم رسالة إدخال size ولكن المشكلة عندي هو أنه يترك مسافة بمقدار ثلاثة مسافات تقريباً وتظهر علامة الكتابة في أول وآخر الرسالة لماذا لا يظهر الرسالة بشكل سليم ؟ harmash-algo-editor-1682419857542.txt
    3 نقاط
  2. أهلا بالجميع, أود أن أطرح سؤالا بشأن قواعد البيانات التي تحتوي على بيانات باللغة العربية, هل يتم إدراج هذه البيانات باللغة العربية بطريقة عادية جدا على نفس الطريقة المتبعة ببناء قواعد البيانات باللغة الإنجليزية؟ أيضا هل بالإمكان أن تحتوي نفس القاعدة على بيانات مختلفة في اللغة؟؟؟
    3 نقاط
  3. لفهم البرمجة من البداية من اي كورس ابدء
    2 نقاط
  4. هل انا لما اتاسس صح واخد وقت في التاسيس هيفرق معايا عليشان ابقا مبرمج محترف محترف انا في تانيه ثانوي وعايز اتاسس الاول ولا ادخل في اللي انا عايزه علطول علشان انجز واوصل بسرعه . واحد صاحبي ساب الدروس الثانويه واتجه لمجال البرمجه واشتغل علي نفسه وبيقولي مش هتعرف تواكب علشان انا داخل الجيش وهو مش داخل . انا عايز احترف واسافر بعيد ايه المطلوب انا حالتي متسمحش اني اقبل ب 2000 جنيه اللي في مصر
    2 نقاط
  5. السلام عليكم. قمت بإنشاء مشروع قمت فيه بتنفيذ json-server (implementing). بحيث: في البداية قمت بتنزيل json server ثم قمت بإنشاء db.json ثم قمت بطلب البيانات (api request) "scripts": { "start": "react-scripts start", "json-server": "json-server --watch db.json --port 5000", "test": "react-scripts test", "eject": "react-scripts eject", "predeploy" : "npm run build", "deploy" : "gh-pages -d build" }, مثلما تلاحظون يوجد port5000 . كيف يمكنني رفع هذا المشروع على منصة netlify. مع العلم أنني قمت برفع المشروع بالطريقة الكلاسيكية (npm build) لكن دون أن تظهر المنتجات. الرابط: https://affariyett.netlify.app شكرا لكم.
    1 نقطة
  6. السلام عليكم اريد ان ادخل مجال ال AI ولكن لا اعرف من اين ابدا ومن اين أتعلم ذلك مع المشاريع فقد اعجبني جدا هذا المجال والروبوتات وبرمجتها وهل يوجد في أكاديمية حسوب مسار كامل لهذا المجال
    1 نقطة
  7. 1-السلام عليكم لا ادري ما المشكله يظهر لي خطا ان phi is not defined رغم اني عرفتها ف for loop 2-ولا تخرج نواتج لh يخرج انها غير معرفه ايضا من المفترض اني ابدا تخزين h ك array بقيم 3-ايضا اريد اخراج النواتج كجدول و رسمه توضح العلاقه بين phi و h const p = 100; const N = 2500; const pi = 3.14; const d0 = 2.5; const w = (2 * pi * N) / 60; const phi_end = 15; const phi_m = phi_end / 2; const sfc = 0.23; const rho = 850; const z = 6; m0_f = (sfc * p) / 3600; mf = (m0_f * 120) / (z * N); Vf = mf / rho; l_st = (Vf * (4 / pi)) ** (1 / 3) * 1000; h_cam = l_st + d0; //calculating v_max from the h_cam and phi_end and phi_m-----------------------------------------------------** v_max = h_cam / ((phi_m ** 2 / 2 + phi_end ** 2 / 2 - phi_end * phi_m) / (6 * N * (phi_end - phi_m)) + phi_m / (12 * N)) / 1000; h_m = (v_max / (12 * N)) * phi_m; //save the value of phi from 0---15------------------------------------------------ //------------------------------------------ for (let phi = 0; phi <= phi_end; phi += 0.5) { //phi values stored } // get the values of h and v and a using for-loop && if-condition for(i=1;i<=31;i++) { if(phi[i]<=phi_m){ h[i]=(v_max/(6*N*phi_m))*((phi[i])^2/2)*1000; v[i]=(v_max/phi_m)*phi[i]; a[i]=w*(v_max/phi_m); } else if(phi[i]>phi_m ){ h[i]=((v_max/(6*N*(phi_end-phi_m)))*(phi_end*phi[i]-((phi[i]))**2/2-phi_end*phi_m+((phi_m))**2/2)+(v_max/(12*N)*phi_m))*1000; v[i]=v_max*((phi_end-phi[i])/(phi_end-phi_m)); a[i]=w*(phi_end/(phi_end-phi_m))*v_max; console.log(h); } else{ h[i]=0; v[i]=0; } } اسف عل الاطاله.
    1 نقطة
  8. انا مشترك في لغة الباثون لاكن أغلب الفيديوهات لا تضهر , جربت بهاتف "Samsung not 9" و ايضا عن طريق حاسوبي "Lenovo"
    1 نقطة
  9. مرحباً، نعم، التاسيس الصحيح يلعب دورًا حاسمًا في كيفية تطورك كمبرمج محترف. فمن الأفضل أن تبدأ بتعلم الأساسيات بشكل صحيح. على الرغم من أن البدء في تعلم اللغات البرمجية الأكثر تطورًا يمكن أن يبدو مغريًا، إلا أن فهم الأساسيات بشكل جيد هو مفتاح للتطور في هذا المجال. لذلك، يجب أن تبدأ بتعلم المفاهيم الأساسية والمبادئ الأساسية للبرمجة، مثل الخوارزميات والهياكل البيانية، ثم تنتقل إلى تعلم اللغات البرمجية الأكثر شيوعًا واستخدامها لإنشاء برامج بسيطة في بداية الأمر. وعندما تشعر بالثقة في فهمك للأساسيات، يمكنك البدء في تعلم المفاهيم والتقنيات الأكثر تطوراً. بالمختصر، البدء بتعلم الأساسيات بشكل صحيح سيساعدك على فهم المفاهيم الأكثر تطوراً بشكل أفضل فيما بعد، وبالتالي ستتمكن من إنجاز الأعمال بسرعة وكفاءة أكبر. اريد أن اشير الي أنك لست في سباق فخذ وقتك لتتعلم بشكل جيد ولا تتسرع رغبة منك في تحقيق دخل مادي في أسرع وقت ممكن حتي ولو كانت الحالة المادية ليست في أفضل حال . لأن هذا سيؤدي الي وقوعك في الكثير من الأخطاء التي ستأخرك في التعلم، ومجال البرمجة تحديداً مجال كبير يحتاج الي الصبر والمثابرة لذلك لا تتعجل وأعط لكل خطوة حقها. وحقيقتاً العمر لا يهم كثيراً فانا مثلاً بدأت بالعمل وتحقيق دخل في نفس سنك أو اصغر ، ولكن أنصحك بالأهتمام بالدراسة وخاصة في الصف الثالث الثانوي حتي يمكنك الألتحاق بأحد الكليات المتعلقة بالمجال فلا غني عن الشهادة الأكاديمية. قرار خاطئ في الحقيقة ، الدراسة الأكاديمية مهمة جداً ولا غني عنها . قم بتخصيص وقت لتعلم البرمجة بجانب الدراسة والأولوية للدراسة، ولا أريدك أن تحمل هم ما هو في المستقبل قم بالأجتهاد والنتيجة عند الله. بالتوفيق
    1 نقطة
  10. استاذي اقوم بعمل هذا البرنامج ليعبر عن mechanism ف محرك احتراق diesel engine اولا قمت بتعريف الثوابت وهي N سرعه خاصه بالكامه الكلمه هنا تقوم بدفع piston وبدوره يقوم بالتحرك مسافه الكامه تقوم بحركه دائريه ولها سرعه N و piston حركته خطيه بالتالي ال piston مع كل درجه من دوران الكامه يرتفع نسبيا h حتي يصل لاعلي نقطه فالثوابت ف البدايه تساعد ف حل المعادلات Mf كميه الوقود N سرعه Vf حجم الوقود الذي سيخرج نتيجه ارتفاع ال piston حيث يقوم ال piston عند الارتفاع بضخ وقود do قطر دخول الوقود وهكذا كي لا أطيل المراد منه التعبير عن h وناويه دوران الكام وهي قمت بتسميتها phi برسمه فقمت بإنشاء loop لاتحسب h والسرعه والعجله عند كل phi والمعادلات لإيجاد النواتج مثلا كما موضح بالصوره رسمه توضح علاقه phi ب v السرعه
    1 نقطة
  11. اها فهمتك استاذي قد قمت بشئ وهو إدخال ال for..loop الثانيه بداخل الاولي وأخرج نواتج صحيحه ولكن يوجد تكرار لبعض القيم وهذا لم يعجبني ثانيا الا يوجد طريقه لاخراج النواتج ف table منظم مثلا كل قيمه زاويه phi لها h و v و a معينه وهكذا ف table
    1 نقطة
  12. private void uploadved(final String pdfname, Uri pdffile){ ProgressDialog progressDialog = ProgressDialog.show(uploadved.this, "جارى ارسال الفيديو", "برجاء الانتظار", false, false); InputStream iStream = null; try { iStream = getContentResolver().openInputStream(pdffile); final byte[] inputData = getBytes(iStream); VolleyMultipartRequest volleyMultipartRequest = new VolleyMultipartRequest(Request.Method.POST, URLphp, new Response.Listener<NetworkResponse>() { @Override public void onResponse(NetworkResponse response) { Log.d("ressssssoo",new String(response.data)); Toast.makeText(uploadved.this, response.toString(), Toast.LENGTH_SHORT).show(); progressDialog.dismiss(); rQueue.getCache().clear(); try { JSONObject jsonObject = new JSONObject(new String(response.data)); Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT).show(); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show(); } }) { /* * If you want to add more parameters with the image * you can do it here * here we have only one parameter with the image * which is tags * */ @Override protected Map<String,String> getParams() throws AuthFailureError { Map<String,String> params = new HashMap<>(); params.put("gsdfg", shall.getInstance(uploadved.this).getuserShow()); params.put("fsdf", shall.getInstance(uploadved.this).getimage()); params.put("idgdfgus", shall.getInstance(uploadved.this).getid()); params.put("fasd",enwanvido); return params; } /* *pass files using below method * */ @Override protected Map<String, DataPart> getByteData() { Map<String, DataPart> params = new HashMap<>(); params.put("imgshare", new DataPart(pdfname ,inputData)); Log.d("testerget work","workingpartdata"); return params; } }; volleyMultipartRequest.setRetryPolicy(new DefaultRetryPolicy( 0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); rQueue = Volley.newRequestQueue(uploadved.this); rQueue.add(volleyMultipartRequest); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
    1 نقطة
  13. أنصحك باستخدام استضافة Railway.app فهي سهلة للغاية، ويمكنك رفع المشروع من خلال مستودع الـ GitHub وإضافة متغيرات البيئة وغيرها وسيعمل المشروع في ثوانٍ، وتستطيع إضافة قاعدة بيانات. وهناك قوالب جاهزة يمكنك الإختيار من بينها إذا أردت لإنشاء مشروع جديد للغة أو إطار العمل الذي تريده على الاستضافة. وهناك منفذ أوامر خاص بالإستضافة CLI يمكنك العمل من خلاله إذا أردت. ويمكنك قراءة المستندات الرسمية حيث بها شرح وافي، أو تستطيع البحث على اليوتيوب بالتالي deploy json server on railway أو How to deploy on railway وأيضًا هناك استضافة أخرى باسم render وهي جيدة أيضًا.
    1 نقطة
  14. تستطيع دعم اللغة العربية في VolleyMultipartRequest عن طريق تعيين مجموعة الأحرف المستخدمة في الإرسال على أن تكون بترميز UTF-8. والقيام بذلك عن طريق استخدام الدالة setCharacterEncoding في كائن VolleyMultipartRequest. يمكن إضافة السطر التالي في دالة VolleyMultipartRequest لتعيين مجموعة الأحرف على UTF-8: @Override public String getBodyContentType() { return "application/json; charset=utf-8"; } وبهذا سيتم إرسال البيانات بترميز UTF-8 الذي يدعم اللغة العربية.
    1 نقطة
  15. كما ذكر المدربون في التعليقات السابقة دورة علوم الحاسب أفضل دورة للبداية. لكن أريد أن أوضح لك شيئاً ضرورياً حتى تنجح في هذه الدورة، و هو أنه عليك إدراك أن البرمجة ليست فقط كتابة كود، فهي ترتكز على مهارات مثل التفكير المنطقي و حل المشاكل، بالإضافة إلى الأساسيات المتعلقة بكيفية عمل الحاسب. حيث أنه في كثير من الأحيان ستواجه مشكلة برمجية لن تستطيع حلها ما لم يكن لديك معلومات نظرية عن كيفية عمل الحاسب، حتى أنك قد لا تكتشف وجود المشكلة و هذا أخطر. عليك أن تركز على هذه المهارات و لا تستعجل الوصول إلى مرحلة بناء تطبيق متكامل، ستصل إلى هذه المرحلة بإذن الله و لكن في حال لم تكن لديك المهارات السابقة فلن تستطيع بناء تطبيقات معقدة، و ستضطر لاحقاً إلى العودة و التركيز على هذه المهارات و هذا سيضيع الكثير من وقتك، لذلك ركز عليها منذ البداية.
    1 نقطة
  16. أنصحك بتعلم استعمال ال docker، فهو يسهل هذه الأمور كثيراً حيث أنه هناك الكثير من الاستضافات المجانية الخاصة به، و ميزاته أنه سيعمل على السيرفر تماماً كما عمل على جهازك. و عندها لن يوجد فرق بين تقنية و أخرى، أي يمكنك استعمال أي تقنية ترغب بها، سواء json server أو أي شيء آخر. مثلاً ستجد موقع مثل oracle يقدم لك خدمة استضافة مجانية لما ندعوه بال containers و هي مثل حافظة تغلف المشروع و فيها البيئة اللازمة لتشغيله و كل شيء، بالتالي تصبح عملية رفع الكود مجرد عملية رفع لملف واحد فقط! يمكنك الوصول إلى هذه الخدمة المجانية من هنا.
    1 نقطة
  17. لا يمكنك تشغيل Json Server على استضافة Netlify ولكن يمكنك استخدام الـ Netlify Functions بدلاً من ذلك. Netlify Functions هي خدمة تقدمها شركة Netlify لتشغيل الأكواد الخاصة بك على شكل API endpoints، وهي تعتبر جزء من خدمات serverless functions. وتعتبر Netlify Functions طريقة لنشر الأكواد التي تعمل على الجانب الخادم كـ API endpoints، حيث يتم تشغيلها تلقائيًا عند حدوث حدث معين، وتقوم بمعالجة الأكواد التي تعمل على الجانب الخادم، ثم تتوقف حتى يحدث حدث آخر. وهذا نقاش حول الموضوع على الموقع الرسمي لـ Netlify ويمكنك الوصول إلى توثيق Netlify Functions الرسمي من هنا
    1 نقطة
  18. السلام عليكم ورحمة الله , قمت بكتابة الشيفرة المتعلقة بملامسة الكائن للون, لكن لا تعمل معي فالكائن لايرجع للوراء و شكرا
    1 نقطة
  19. تم الإجابة على أغلب أسئلتك بشكل وافي، لكن بخصوص التكلفة أنت بحاجة إلى معرفة التالي: في البداية قد تضطر إلى قبول تصميم صفحة هبوط مثلاً تتكلف 100 دولار بمبلغ 50 أو 25 دولار، وذلك من أجل الحصول على أول عميل لك على مواقع العمل الحر. حيث أن التكلفة الطبيعية لصفحة الهبوط تتراوح ما بين 50 إلى 100 دولار وقد تصل إلى 300 دولار، وذلك تبعًا لمدى التعقيد في التصميم وهل سيتم تنفيذ التصميم من قبلك، أم ستقوم باستلام التصميم جاهز وستعمل على أنت على تنفيذه. بعد ذلك، سيتعين عليك استكشاف متوسط الأسعار التي يطلبها المستقلين الآخرين، وهو عامل هام للمنافسة في ذلك السوق، فلن تستطيع رفع سعرك إلا إذا كان لديك سنوات خبرة ومعرض أعمال مميز. وببساطة تستطيع الإعتماد على تكلفة 50 دولار للصفحة وزيادة التكلفة تبعًا للوقت والتعقيد والمميزات المطلوبة، وحجم الخبرة التي يتطلبها المشروع، حيث أن للخبرة ثمن بالتأكيد، ولكن الكثير من الخبرة يعني أنك قادر على تنفيذ المشروع بشكل سريع وهنا يجب حساب تكلفة الخبرة والجودة بعيدًأ عن عامل الوقت. وأيضًا يجب احتساب القيمة التي تقدمها للعميل، فمثلاً لو كنت تقوم ببناء موقع لعميل يحقق لهم أرباح كبيرة على المدى الطويل، فبالطبع أنت بحاجة إلى حساب تكلفة أعلى للمشروع، أي عليك دائمًا وضع العائد الذي سيحصل عليه العميل جراء تنفيذك للمشروع فإن كان بسيطًا فليس من المنطقي وضع تكلفة مرتفعة للمشروع. وهناك عوامل أخرى مثل البلد الخاصة بالعميل وعملة تلك البلد وقيمتها مقابل الدولار، وأيضًا إذا كان الموقع خاص بشركة فستكون التكلفة أكبر مقارنًة إذا ما كان لعميل بمفرده ولمشروع شخصي وبميزانية منخفضة. وقد تم النقاش حول العمل الحر وحساب تكلفة المشروع في النقاشات التالية بشكل مفصل أكثر:
    1 نقطة
  20. بالطبع سيحسن فهي المسؤولة عن تخزين البيانات بشكل مؤقت، وعن نفسي أتذكر اني قد لحظت فرقا كبيرا جدا في الآداء والانتاجية عندما قمت بترقية حجم الرامات من 4 الى 32 .. ولكن معظم المطورون يوصون بحجم 8 جيجابايت كحد أدنى، بينما يفضل الكثيرون استخدام 16 جيجابايت لأداء أفضل وأكثر استجابة. ومن المهم الإشارة إلى أن حجم الرام ليس العامل الوحيد الذي يؤثر على أداء الجهاز، بل يتأثر أيضاً بمعالج الكمبيوتر وسرعة القرص الصلب وكرت الشاشة وغيرها من المكونات الأخرى. لذلك، ينبغي النظر إلى المتطلبات الفعلية للتطبيقات والبرامج التي تعمل عليها وضمان توافق جميع المكونات. قم بعمل استطلاع بسيط والبحث بشأن افضل واقل المتطلبات لتشغيل برنامج معين، سيمكنك بهذا أخذ فكرة عن متطلبات البرنامج الذي تشتغل عليه. الجلوس على جهازك هو ما سيشغل حيزا كبيرا من وقتك مستقبلا، ولذلك فإنه من المهم جدا الاستثمار فيه وفي راحتك وفي انتاجيتك بدرجة أولى. فهو سرعان ما سيلحظ نتاجه.
    1 نقطة
  21. تم التوضيح من قبل عزيزي، يمكنك دمج البيانات المسترجعة من الجدولين في نفس القائمة باستخدام الدالة addAll() في مكانين مختلفين في الكود. هناك عدة طرق للقيام بذلك وهذا مثال لكيفية الدمج: Future<void> _fetchData() async { final FirebaseFirestore firestore = FirebaseFirestore.instance; // Fetch the first query snapshot and extract the value of 'TopicState' final QuerySnapshot topicsSnapshot = await firestore .collection('topics') .where('id', isEqualTo: widget.PostID) .get(); final int topicState = topicsSnapshot.docs.isNotEmpty ? topicsSnapshot.docs.first.get('Id_Sub_Category') : null; final QuerySnapshot subCategorySnapshot = await firestore.collection('Sub_Category').where('idSubCat', isEqualTo: topicState).get(); final List<FullListWomanModel> data = []; if (topicsSnapshot.docs.isNotEmpty) { data.addAll(topicsSnapshot.docs.map((doc) => FullListWomanModel.fromJson(doc.data() as Map<String, dynamic>)).toList()); } if (subCategorySnapshot.docs.isNotEmpty) { // Loop over the documents of the Sub_Category collection and check if the document already exists in the data list to avoid duplication subCategorySnapshot.docs.forEach((doc) { final FullListWomanModel model = FullListWomanModel.fromJson(doc.data() as Map<String, dynamic>); if (!data.contains(model)) { data.add(model); } }); } setState(() { _ListDataDisplay = data; }); } الكود يقوم بإضافة جميع الوثائق التي تم العثور عليها في الجدول الثاني Sub_Category إلى القائمة data، ولكنه يتحقق أيضًا مما إذا كانت الوثيقة موجودة بالفعل في القائمة الرئيسية لتجنب التكرار والحفاظ على وجود عناصر فريدة في القائمة المدمجة النهائية.
    1 نقطة
  22. بالنسبة لسؤالك حول زيادة الرام زيادة مساحة الرام يمكن أن تساعد في تحسين أداء الجهاز وتقليل البطء، ولكن لا يمكن التأكد من أنها ستحل المشكلة بالضبط. من الممكن أن يكون هناك مشكلة أخرى في جهاز الكمبيوتر الخاص بك، مثل مشكلة في المعالج وسرعة القرص الصلب وغيرها. قبل البدء في ترقية الرام، ينبغي التحقق من أن الجهاز يستوعب أي مساحة إضافية من الرام. يجب أيضا التأكد من توافق أي رام إضافية مع الرام الموجودة بالفعل في الجهاز. لحل مشكلتك الأساسية يجب أن نتبع هذه الخطوات: يجب أن نفهم سبب بطء الجهاز عند تشغيل البيئتين معا. يجب أن نبحث عن حلول ممكنة لتحسين أداء الجهاز والبيئتين. سبب بطء الجهاز عند تشغيل البيئتين معا السبب هو نقص في الموارد المتاحة لكل بيئة. كل بيئة وهمية تحتاج إلى مساحة من الذاكرة العشوائية (RAM) والمعالج (CPU) والقرص الصلب (HDD) لتعمل بشكل صحيح. عند تشغيل بيئتين معا، يتم تقاسم هذه الموارد بينهما، مما يؤدي إلى تقليل كفاءة كل منهما. خصوصا إذا كان حجم الموارد المخصصة لكل بيئة قليل جدا مقارنة بالحد الأدنى المطلوب لتشغيل نظام التشغيل المستخدم فيها. في حالتكم، أعطيتم كل بيئة أقل من 2 غيغابايت من الذاكرة العشوائية، وهذا قد يكون غير كاف لتشغيل نظام لينكس وخادم أوبونتو بشكل سلس. حلول ممكنة لتحسين أداء الجهاز والبيئتين هي - زيادة حجم الذاكرة العشوائية في جهازكم، إذا كان ذلك ممكنا. هذا سيسمح لكم بزيادة حجم الذاكرة المخصصة لكل بيئة وهمية، مما سيحسن من استجابتها وسرعتها. - تقليل حجم الذاكرة المخصصة لخادم أوبونتو، إذا كان ذلك كافيا لتشغيل الخدمات التي تحتاجون إليها. هذا سيسمح لكم بإعطاء المزيد من الذاكرة لبيئة لينكس، مما سيحسن من أدائها. - استخدام قرص صلب من نوع SSD: يوفر القرص الصلب SSD سرعة فائقة في قراءة وكتابة البيانات، ويتحمل الصدمات والاهتزازات بشكل أفضل من الأقراص الصلبة العادية، كما أنها لا تحتوي على قطع متحركة مما يتيح لها العمل بكفاءة وهدوء أكبر، ويعتبر أقل استهلاكًا للطاقة مما يؤدي إلى توفير الطاقة والحفاظ على بطارية اللابتوب وعمرها الافتراضي. في النهاية، إذا كنت تشعر بأنه مشكلة متكررة ولا ترغب في اتباع الخطوات المذكورة أعلاه، يمكن النظر في تحديث جهاز الكمبيوتر بشكل عام لتلبية المتطلبات الحالية.
    1 نقطة
  23. لا شك أن أي شخص مهتم بالتسويق خلال الخمس إلى العشر سنوات الأخيرة قد لاحظ الانتشار المتزايد لمصطلح جديد يعرف بالتسويق بالمحتوى، فاستراتيجيات التسويق بالمحتوى منتشرة في كل مكان، وكل منظمات الأعمال تريد القيام بالتسويق بالمحتوى، ولكن هل هو المقاربة الصحيحة؟ يناقش هذا المقال تعريف وطبيعة التسويق بالمحتوى ويشرح أسباب استخدامه، كما يقدّم بعض الأفكار حول كيفية استخدام هذا الأسلوب والأمور التي ينبغي تجنبها. تعريف التسويق بالمحتوى تشترك تعاريف التسويق بالمحتوى في بعض المعالم، إذ تتضمن كلها جزئية صنع "محتوى"، واستخدامه في جذب العملاء المحتملين، والتفاعل معهم، والاحتفاظ بهم. تعريف معهد التسويق بالمحتوى: تعريف Joe PulizzZ و Newt Barrett غير أن هذه التعاريف تطرح أسئلةً أخرى، خصوصًا ما الذي نقصده تحديدًا بالمحتوى؟ يعرّف المحتوى عمومًا بأنه أي معلومة تنتجها منظمة أو مشروع، لتشاركها مع العملاء الحاليين أو المحتملين، وهي تغطي تبعًا لذلك كلًا من المعلومات المطبوعة، والمعلومات على الإنترنت؛ وقد تأخذ عدة صور، بما في ذلك المنشورات والأوراق البيضاء والمدونات ومقاطع الفيديو التوضيحية وغيرها من الفيديوهات والبريد الإلكتروني ومعلومات المنتجات ومنشورات مواقع التواصل الاجتماعي. الفرق الجوهري ما الذي يجعل التسويق بالمحتوى تحديدًا مختلفًا عن إرسال المعلومات عشوائيًا للعملاء؟ أو ما يعرف لدى الأشخاص الأكثر تشاؤمًا بإرسال البريد غير المرغوب فيه للعملاء؟ يقترح معهد التسويق بالمحتوى أن الفرق الجوهري يكمن في تركيز التسويق بالمحتوى على المحتوى الملائم والقيّم. بعبارة أخرى، المعلومات التي يريدها العملاء ويحتاجونها. هدف التسويق بالمحتوى من المهم فهم أن هدف التسويق بالمحتوى هو البيع ولكن ليس مباشرةً، فبدلًا عن ذلك، هو يتمحور حول بناء علاقة مع عملائك، وقد يتضمن ذلك إظهار أنك (أو أن شركتك) خبير في عملائك واحتياجاتهم، ومن خلال بناء هذه العلاقة كمستشار موثوق، تأمل أن يُترجَم نشاطك إلى سلوك مربح من قبل عملائك (مثل شراء منتجاتك أو خدماتك). تبعًا لذلك، ليس من الضروري أن تروّج صناعة المحتوى لغرض التسويق بالمحتوى مباشرةً لمنتجاتك أو خدماتك. في الحقيقة، غالبًا ما يكون من الأفضل أن تتجنب ذلك، بل ينبغي أن تقدم معلومات قيّمةً وملائمة للعميل، والتي ستقوده في النهاية إلى العودة إليك. يُعَدّ ذلك خطًا رفيعًا، لكن من المصيري تذكّره وتجنب التسويق المباشر في محتواك. وعلى الرغم مما سبق، ينبغي توضيح أن ما يعدّه شخص ما تسويقًا بالمحتوى، يمكن أن يكون تسويقًا غير مرغوب به بالنسبة لشخص آخر. يتطلب التسويق بالمحتوى إذًا الكثير من العناية، إذ يعتمد كثيرًا على القدرة على تحليل متطلبات العميل وتخصيص المعلومة تبعًا لهذه الاحتياجات، وقد يتطلب هذا تصنيفًا قويًا للعملاء لتستطيع أن تتعمق في تحديد مجموعات معينة، وقد يذهب التسويق بالمحتوى أبعد من ذلك لدرجة التفكير في المجموعات المكونة من عميل واحد، وهذا صحيح خاصةً في حالة التسويق الموجه للشركات والذي تستهدف فيه فعليًا كل عميل على حدة. بالإضافة إلى ذلك، فإن التسويق بالمحتوى كثيرًا ما يكون أقل اندفاعيةً من التسويق التقليدي عبر البريد الإلكتروني، فبدل مراسلة العملاء على البريد الإلكتروني، يعتمد التسويق بالمحتوى غالبًا على قيام العملاء بالبحث عن معلومات أو التفاعل مع الشركة على مواقع التواصل الاجتماعي، وبالتالي فإن هذا الأسلوب يعتمد أكثر على العملاء ويركز عليهم أيضًا. منافع التسويق بالمحتوى تعبّر الشركات التي تستخدم أسلوب التسويق بالمحتوى غالبًا عن المنافع التالية: ارتفاع المبيعات. انخفاض التكلفة. زيادة ولاء العملاء. لدى هذه الشركات أيضًا القدرة على النظر إلى المحتوى كمركز ربح وليس كتكلفة. من المهم أن نفهم أن التسويق بالمحتوى ليس عمليةً مستقلةً في حد ذاتها، بل يدعم المحتوى في الواقع كل جانب من جوانب التسويق، إذ يعتمد التسويق عبر وسائل التواصل الاجتماعي مثلًا على مشاركة المحتوى ذي الجودة، ودعم وصوله باستخدام شبكات التواصل الاجتماعي؛ كما أن خاصية تحسين محركات البحث تعتمد على المحتوى الجيد الذي يريد الناس قراءته، لذا عليك أن توليه أهميةً كبيرةً جدًا، وهنا يمكنك الاستعانة بمساعدين وخبراء في المجال تجدهم على منصات العمل الحر مثل خمسات ومستقل، أو أن توظف عاملًا عن بعد مباشرةً من منصات مخصصة لذلك مثل منصة بعيد. خطوات عملية التسويق بالمحتوى تتمثل الميزة الجوهرية للتسويق بالمحتوى في أنه يبدأ من احتياجات العملاء. ويعني ذلك أن أول خطوة في أي عملية التسويق بالمحتوى هي التعرف على عملائك، وأنك تحتاج بعد ذلك إلى تحديد احتياجاتهم وخاصة مشكلاتهم أو نقاط معاناتهم. المثير للاهتمام في هذه العملية هو أن نقاط المعاناة هذه ليست دائمًا واضحةً للعملاء أنفسهم (بعد). في الحالة المثالية، عند التخطيط للتسويق بالمحتوي، ستحتاج إلى أن تكون متقدمًا بخطوة واحدة عن عملائك، وذلك لأنهم عندما يبحثون عن حل لمشكلاتهم، فأنت تريدهم أن يجدوا المحتوى الذي صنعته؛ وليحدث هذا، يجب أن تكون قد صنعت هذا المحتوى قبل أن يبدؤوا البحث عن هذه الأجوبة. تبدأ عملية تحديد احتياجات ومشاكل العملاء من بحوث السوق والذكاء التنافسي، ما يسمح لك بفهم عملائك وما هو متوفر لحل مشكلاتهم. بإمكانك بعد ذلك البدء ببناء المحتوى الذي يستكشف مشكلاتهم ويشرح كيف يمكن حلّها. في نهاية المطاف، قد تقودك هذه العملية إلى عدم الاقتصار على صناعة محتوى، بل أيضًا صناعة منتجات وخدمات تحل مشكلات عملائك أفضل. ختامًا قد يكون أهم شيء ينبغي تذكره حول التسويق بالمحتوى هو أنه لا يتعلق بالبيع المباشر، فهو يتمحور بدلًا عن ذلك حول بناء علاقة قوية ومنتجة مع عملائك الحاليين والمحتملين. وإذا حققت هذا، فإن المبيعات ستتبعه لا محالة. ترجمة -وبتصرّف- للمقال Content Marketing. اقرأ أيضًا أنواع التسويق الأساسية المحتوى هو التسويق ما هو سرّ التسويق بالمحتوى Content Marketing؟ إعادة صياغة المحتوى التّسويق بالمُحتوى: كيف ترفع جودة مُحتواك من "جيّد" إلى "رائع" كيف تستخدم التسويق بالمحتوى لتزيد من تفردك عبر الإنترنت؟
    1 نقطة
  24. هناك ثلاثة معاملات منطقية في JavaScript وهي: || (OR)، و && (AND)، و ! (NOT). رغم أنها تسمى معاملات منطقية، إلا أنه يمكن تطبيقها على أي نوع من أنواع البيانات وليس فقط على البيانات المنطقية. دعنا نرى التفاصيل. المعامل || (OR) المنطقي يُمثَّل معامل OR المنطقي بخطين عموديين ||: result = a || b; في لغات البرمجة القديمة، يعالج المعامل OR المنطقي البيانات المنطقية فقط. إذا كانت أي من وسائطه (arguments) تحمل القيمة true، فإن المعامل يُرجع القيمة true، عدا ذلك يُرجع false. في JavaScript، المعامل أصعب قليلاً وأكثر فائدة، دعنا نرى ما يحدث مع البيانات المنطقية. هناك أربع مجموعات منطقية محتملة: alert( true || true ); // true alert( false || true ); // true alert( true || false ); // true alert( false || false ); // false كما ترى، النتيجة صحيحة true دائمًا باستثناء الحالة التي يكون فيها كلا العاملين (operands) خطأ false. إذا لم يكن العامل منطقيًا، سيُحوّل إلى قيمة منطقية لتتم عملية التقييم. على سبيل المثال، يتم التعامل مع العدد 1 على أنه true، والعدد 0 على أنه false: if (1 || 0) { // تمامًا true || false يقابل التعبير alert( 'truthy!' ); } غالبًا ما يُستخدام المعامل || في الجُمل الشرطية if لاختبار ما إذا كان أي من الشروط محقق true. على سبيل المثال: let hour = 9; if (hour < 10 || hour > 18) { alert( 'The office is closed.' ); } يمكن التحقُّق من عدَّة شروط في الوقت نفسه مثل: let hour = 12; let isWeekend = true; if (hour < 10 || hour > 18 || isWeekend) { alert( 'The office is closed.' ); //الوقت عطلة } المعامل OR يرجع القيمة الصحيحة الاولى المنطق الموصوف أعلاه قديم إلى حد ما. لنوضّح ميزات إضافية في JavaScript. الخوارزمية الموسعة تعمل على النحو التالي. بالنظر إلى قيم المعامل OR المتسَلسَلة في المثال التالي: result = value1 || value2 || value3; يقوم المعامل المنطقي || بالتالي: يقيم المعاملات (operand) من اليسار إلى اليمين. يحوِّل جميع العاملات (operands) إلى قيم منطقية إن لم تكن كذلك. إذا كانت النتيجة صحيحة true، يتوقف ويرجع القيمة الأصلية لذلك العامل. إذا قيِّمَت جميع العامِلات وكانت جميعها false خطأ، يرجع العامل الأخير. تُرجَع القيمة بشكلها الأصلي. بمعنى آخر، سلسلة من المعامل || تُرجع القيمة الصحيحة الأولى أو القيمة الأخيرة إذا لم يتم العثور على قيمة صحيحة. على سبيل المثال: alert( 1 || 0 ); // 1 العدد 1 عبارة عن القيمة الصحيحة alert( true || 'no matter what' ); // (true is truthy) alert( null || 1 ); // 1 القيمة الصحيحة الأولى هي alert( null || 0 || 1 ); // 1 القيمة الصحيحة الأولى هي alert( undefined || null || 0 ); // 0 جميع القيم خاطئة، يرجع القيمة الأخيرة هذه المميزات تؤدي إلى بعض الاستخدامات المثيرة للاهتمام موازنةً بالمعامل المنطقي (OR) الكلاسيكي، أو المنطقي فقط. 1- الحصول على أول قيمة صحيحة من قائمة المتغيرات أو التعبيرات. تخيل أن لدينا قائمة من المتغيرات التي يمكن أن تحتوي على بيانات أو تكون فارغة/غير محددة null/undefined. كيف يمكننا العثور على أول واحد مع البيانات؟ باستخدام المعامل المنطقي ||: let currentUser = null; let defaultUser = "John"; let name = currentUser || defaultUser || "unnamed"; alert( name ); // يختار القيمة الصحيحة الأولى إذا كان كلًا من المتغيرات currentUser و defaultUser خطأ، فستكون النتيجة unnamed. 2- تقييم الدارة القصيرة (Short-circuit) لا تكون العاملات (operands) قيمًا فقط، بل يمكن أن تكون تعبيرات عشوائية. المعامل المنطقي OR يفحصها ويقييمها من اليسار إلى اليمين، يتوقف التقييم عند الوصول إلى قيمة صحيحة وتُرجع القيمة. تسمى هذه العملية "تقييم الدارة القصيرة" لأنها تختصر عملية التقييم قدر الإمكان من اليسار إلى اليمين. يظهر هذا بوضوح عندما يكون التعبير المعطى كعامل ثاني، له تأثير جانبي مثل إسناد متغير. في المثال أدناه، لا يتم إسناد x: let x; true || (x = 1); alert(x); // undefined, because (x = 1) not evaluated إذا كان العامل الأول خطأ false، يقييم المعامل المنطقي || العامل الثاني، وبالتالي تستمر عملية الإسناد: let x; false || (x = 1); alert(x); // 1 عملية الإسناد عملية بسيطة. قد تكون هناك آثار جانبية، لن تظهر إذا كان التقييم لم يصل إليها. كما نرى، فإن حالة الاستخدام هذه هي "طريقة أقصر للقيام بالمعامل الشرطيif". يُحوَّل العامل الأول إلى قيمة منطقية؛ فإذا كان خطأ، فسيُقيَّم العامل الثاني. في أغلب الأحيان، من الأفضل استخدام المعامل الشرطي if بشكله الاعتيادي للحفاظ على سهولة فهم الشيفرة، ولكن لا يكون دائمًا في متناول اليد. المعامل AND) &&‎) المنطقي يُمثَّل المعامل AND المنطقي بعلامتين &&: result = a && b; عند كتابة شيفرة بلغات البرمجة القديمة، يُرجع المعامل AND المنطقي true إذا كان كلا العاملان صحيحين ويُرجع false عدا ذلك: alert( true && true ); // true alert( false && true ); // false alert( true && false ); // false alert( false && false ); // false مثال مع المعامل الشرطي if: let hour = 12; let minute = 30; if (hour == 12 && minute == 30) { alert( 'The time is 12:30' ); } تمامًا كما هو الحال مع المعامل المنطقي OR، يُسمح بأي قيمة لتكون عاملًا للمعامل المنطقي AND: if (1 && 0) { // تقييم كأنها صواب او خطأ alert( "won't work, because the result is falsy" ); } المعامل AND يرجع القيمة الخطأ الأولى بالنظر إلى قيم المعامل AND المتعدِّدة في المثال التالي: result = value1 && value2 && value3; يقوم المعامل المنطقي AND بالتالي: يقيم العاملات من اليسار إلى اليمين. يحوّل جميع العاملات إلى قيم منطقية. إذا كانت النتيجة false، يتوقف ويرجع القيمة الأصلية لذلك العامل. إذا قيِّمَت جميع العامِلات وكانت جميعها صحيحة، يُرجَع العامل الأخير. بمعنى آخر، سلسلة من المعامل AND تُرجع القيمة الخطأ الأولى أو القيمة الأخيرة إذا لم يُعثَر على أي قيمة خطأ. القواعد المذكورة أعلاه تشبه قواعد المعامل المنطقي OR. الفرق هو أن المعامل المنطقي AND يُرجع القيمة الخطأ الأولى بينما يُرجع المعامل المنطقي OR القيمة الصحيحة الأولى. على سبيل المثال: // إذا كان العامل الأول صحيحًا، يرجع // العامل الثاني AND المعامل المنطقي alert( 1 && 0 ); // 0 alert( 1 && 5 ); // 5 // إذا كان العامل الأول خطأ، يرجع المعامل // هذا العامل ويتجاهل العامل الثاني AND المنطقي alert( null && 5 ); // null alert( 0 && "no matter what" ); // 0 يمكننا أيضا سَلسَلة العديد من القيم على التوالي. انظر كيف تُرجَع أول قيمة خطأ: alert( 1 && 2 && null && 3 ); // null عندما تكون جميع القيم صحيحة، تُرجَع آخر قيمة: alert( 1 && 2 && 3 ); // 3, القيمة الأخيرة أولوية المعامل المنطقي && في التنفيذ أعلى من أولوية المعامل المنطقي || لذلك، التعبير التالي a && b || c && d هو نفس التعبير (a && b) || (c && d) مع الأقواس التي لها الأولية دومًا. يمكن استعمال المعامل المنطقي && بدلًا من if مثل المعامل المنطقي ||. على سبيل المثال: let x = 1; (x > 0) && alert( 'Greater than zero!' ); لن ينفَّذ الإجراء في الجزء الأيمن الخاص بالمعامل المنطقي && إلا إذا وصل التقييم إليه، أي فقط إذا كان x>0 محقَّقًا (صحيحًا): let x = 1; if (x > 0) { alert( 'Greater than zero!' ); } يبدو المثال الأول الذي استعملنا فيه المعامل المنطقي && أقصر، ولكن المثال الثاني الذي استعلمنا فيه if أوضح أضف إلى سهولة قراءة الشيفرة. لذلك، نوصي باستخدام كل معامل للغرض المناسب له: أي يمكنك استخدام التعليمة الشرطية if عندم وجود شرط، واستعمل المعامل المنطقي &&عند التعامل مع القيم المنطقية. المعامل المنطقي ! (NOT) المعامل المنطقي NOT يُعبَّر عنه بعلامة التعجب !. الصيغة الخاصة به بسيطة للغاية: result = !value; يقبل المعامل المنطقي NOT عاملًا واحدًا (operand) ويقوم بما يلي: يُحوِّل العامل إلى قيمة منطقية: true/false. يرجع القيمة العكسية لتلك القيمة المنطقية. على سبيل المثال: alert( !true ); // false alert( !0 ); // true يُستخدَم المعامل المنطقي NOT المزدوج (أي !!) في بعض الأوقات لتحويل قيمة معينة إلى قيمة منطقية: alert( !!"non-empty string" ); // true alert( !!null ); // false بمعنى، المعامل المنطقي NOT الأول (أي ‎!"non-empty string"‎) يحول القيمة إلى قيمة منطقية (true!) ويرجع القيمة العكسية (false)، والمعامل المنطقي NOT الثاني (أي ‎!!"non-empty string"‎) يرجع القيمة العكسية مرة أخرى للقيمة التي أعادها المعامل الأول (true الناتج النهائي). في النهاية، يوفر لنا المعامل !! وسيلةً لتحويل أي قيمة إلى قيمة منطقية بسهولة. هناك طريقة مطوّلة أكثر قليلاً لفعل الشيء نفسه - باستخدام الدالة Boolean: alert( Boolean("non-empty string") ); // true alert( Boolean(null) ); // 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; } تمارين ما هي نتيجة المعامل OR الأهمية: 5 ما ناتج الشيفرة التالية؟ alert( null || 2 || undefined ); الحل: الإجابة هي 2، هذه هي القيمة الصحيحة الأولى. alert( null || 2 || undefined ); ما هي نتيجة سلسلة من المعامل OR للدالة alert الأهمية: 3 ما ناتج الشيفرة التالية؟ alert( alert(1) || 2 || alert(3) ); الحل: الإجابة هي: أولًا 1 ثم 2 alert( alert(1) || 2 || alert(3) ); استدعاء الدالة alert لا يُرجع قيمة. بصيغة أخرى، يرجع undefined . معامل OR الأول || يُقييم العامل الأيسر alert(1)‎ وهذا يُظهر رسالةً تحوي 1. الدالة alert ترجع undefined، لذلك ينتقل المعامل OR للعامل التالي بحثًا عن قيمة صحيحة. العامل الثاني 2 عبارة عن قيمة صحيحة (أي يقيَّم إلى true)، وبذلك يتوقف تنفيذ سلسلة المعامل OR ويُرجع العامل 2 ثم يُعرَض بواسطة الدالة alert. لن يظهر العدد 3، لأن التقييم انتهى عند العامل الثاني و لن يصل إلى alert(3)‎. ما هي نتيجة المعامل AND الأهمية: 5 ما ناتج الشيفرة التالية؟ alert( 1 && null && 2 ); الحل: الإجابة هي: null لأنها القيمة الخطأ الأولى في التعبير: alert( 1 && null && 2 ); ما هي نتيجة سلسلة من المعامل AND للدالة alert الأهمية: 3 ماذا ستُظهر الشيفرة التالية؟ alert( alert(1) && alert(2) ); الحل: الإجابة هي: 1 ثم undefined: alert( alert(1) && alert(2) ); استدعاء الدالة alert يُرجع undefined (هي فقط تُظهر رسالة للمستخدم، أي ليس هناك شيء ذا معنى لإعادته). لهذا السبب، يقيِّم المعامل && العامل الأيسر (المخرجات 1) ، ويتوقف على الفور، لأنَّ القيمة undefined هي قيمة خطأ (أي false). والمعامل && يبحث عن أول قيمة خطأ ويُرجعها، فقط. الناتج من سَلسلة المعاملات على النحو التالي (OR AND OR) الأهمية: 5 ما الناتج من الشيفرة التالية؟ alert( null || 2 && 3 || 4 ); الحل: الإجابة هي: 3. alert( null || 2 && 3 || 4 ); أولوية المعامل && في التنفيذ أكبر من أولوية المعامل ||، لذلك يُنفَّذ أولًا. نتيجة لذلك 2 && 3 = 3، يصبح التعبير: null || 3 || 4 الآن، الإجابة هي القيمة الصحيحة الأولى: 3. حصر قيمة متغير ضمن مجال الأهمية: 3 اكتب شرطًا (أي if) للتحقق من أنَّ قيمة المتغير age محصورة بين 14 و 90 (داخلة ضمن المجال). الحل: if (age >= 14 && age <= 90) حصر متغير خارج مجال الأهمية: 3 اكتب شرطًا (أي if) للتحقق من أنَّ قيمة المتغير age لا تقع ضمن 14 و 90 (داخلة ضمن المجال). أنشئ تعبيرين مختلفين: الأول باستخدام معامل النفي !، والثاني دونه. الحل: التعبير الأول: if (!(age >= 14 && age <= 90)) التعبير الثاني: if (age < 14 || age > 90) سؤال باستخدام التعبير الشرطي if الأهمية: 5 أي دالة من الدوال alert سوف تُنفَّذ؟ ماذا ستكون نتائج التعبيرات الموجودة في داخل التعبير الشرطي if(...)‎: if (-1 || 0) alert( 'first' ); if (-1 && 0) alert( 'second' ); if (null || -1 && 1) alert( 'third' ); الحل: الإجابة هي: التعبير الأول والثالث والسبب: // يعمل // ناتج 0 || 1- هو 1-، أول قيمة صحيحة if (-1 || 0) alert( 'first' ); // لا يعمل // ناتج 0 && 1- هو 0، قيمة خطأ if (-1 && 0) alert( 'second' ); // يُنفَّذ بالشكل التالي // || المعامل && له أولوية في التنفيذ أكبر من المعامل // || يُنفذ أولًا 1 && 1- ثم المعامل // null || -1 && 1 -> null || 1 -> 1 if (null || -1 && 1) alert( 'third' ); التحقق من تسجيل الدخول الأهمية: 3 اكتب الشيفرة التي تطلب من المستخدم تسجيل الدخول بواسطة الدالة prompt. إذا أدخل المستخدم Admin، فاطلب كلمة مرور بواسطة الدالة prompt، إذا كان الإدخال عبارة عن سطر فارغ أو مفتاح الهروب Esc - فأظهر "تم الإلغاء"، إذا كان عبارة عن سلسلة نصية أخرى - فأظهر "لا أعرفك". تُقحص كلمة المرور على النحو التالي: إذا كانت تساوي "TheMaster"، سيُعرَض "مرحبًا!" ، سلسلة نصية أخرى، سيُعرَض "خطأ" ، سلسلة نصية فارغة أو "Cancel"، أظهر "إلغاء". يُرجى استخدام الشرط المتداخل (nested) للمحافظة على سهولة قراءة الشيفرة. ملاحظة: تمرير قيمة فارغة للدالة prompt يُرجِع سلسلة فارغة ''. الضغط على مفتاح الهروب ESC أثناء تنفيذ الدالة prompt يُرجِع null. الحل: let userName = prompt("من أنت؟", ''); if (userName == 'Admin') { let pass = prompt(ما كلمة المرور؟', ''); if (pass == 'TheMaster') { alert( 'مرحبًا!' ); } else if (pass == '' || pass == null) { alert( 'إلغاء' ); } else { alert( 'خطأ' ); } } else if (userName == '' || userName == null) { alert( 'إلغاء' ); } else { alert( "لا أعرفك" ); } لاحظ أن المسافات البادئة الرأسية داخل الشرط if غير مطلوبة من الناحية التقنية، لكنها تجعل الشيفرة سهلة القراءة. ترجمة -وبتصرف- للفصل Logical operators من كتاب The JavaScript Language .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; } اقرأ أيضًا المقال التالي: حلقتا التكرار while و for المقال السابق: المعاملات الشرطية
    1 نقطة
×
×
  • أضف...