لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 05/23/20 في كل الموقع
-
السلام عليكم , دائما يراودني سؤال وابقى محتار عن الاجابة , وهو انه لماذا اتعلم البرمجة ولغاتها لشهور او سنين من اجل انشاء موقع الكتروني , مع انه يوجد مواقع تقدم لك هذه الخدمة وتنشاها باقصى سرعة مثل الووردبريس . هل مثلا انشاء موقع من التعلم لشهور يكون افضل من تلك الخدمات السريعة ؟؟ المرجو الاجابة , فانا جدا متحمس لهدا المجال , وجزاكم الله خيرا .2 نقاط
-
مرحباً @دانا دلول كل عام وأنت بخير لا يلزم إتقان اللغة الإنجليزية للتعامل مع البرمجة والتطبيقات ,بل فقط تعلم الأساسيات وبعض المصطلحات سيكون كافي للتعامل مع البرمجة بشكل عام2 نقاط
-
و عليكم السلام.. أولا عند تعلمك البرمجة بإمكانك بناء منصات شبيهة بووردبريس لتسمح لمن لا يمتلك المعرفة و الخبرة في مجال البرمجة على بناء موقع إلكتروني بسهولة. تانيا : منصات صناعة المواقع الشبيهة بوورد بريس هي منصات إدارة محتوى و ليست صناعة مواقع فموقع وورد بريس يحتاج إلى قالب و هذا القالب يقوم بتصميمه مبرمج من ثم يستخدمه أحد مستخدمي الووردبريس في موقعه و كذلك تحتاج إلى إضافات plugins و هذه أيضا يقوم المبرمجين بتطويرها حتى يتسنى لمن لا يملك المعرفة و القدرة على تطويرها من الصفر من إستخدمها في موقعه. ثالثا : الحرية.. ماذا لو ترغب في إضافة plugin غير موجودة ستحتاج إلى توظيف مبرمج لصناعتها لك , ماذا لو ترغب في عمل تعديلات على إضافة ما أو على القالب الخاص بك ستحتاج إلى مبرمج , و هنالك العديد من الأمور التقنية الأخرى التي تحتاج إلى شخص على دراية بلغات البرمجة. عمل المبرمجين طيلة السنوات السابقة على تسهيل إستخدام الحاسوب و تقنياته للعامة و نجحو في ذلك و تدريجيا يتحول عمل مطوري المواقع من تصميم و تطوير المواقع إلى تصميم و تطوير أدوات تسهل للعامة تطوير موقع خاص بهم مثل wix.com2 نقاط
-
صباح الخير @دانا دلول برنامج nox هو محاكي أندرويد أي تستطيعين تنزيل تطبيقات الأندرويد عليه بمجرد تشغيله سيعمل مثل الهاتف الذي يعمل بنظام أندرويد2 نقاط
-
عند توجيه الانظار لك سواء في خطاب او انتضار شيء او مسؤولية فان العقل يتأرجح و يهبط وعيه الى الاسفل و يشعر بالتردد و الخوف و نقص الثقة .... لماذا ؟؟؟ هل لانه مشغول فقط بالموقف القادم سواء قبل هذا الموقف او قبيله مباشرة لذلك فيصبح العقل يضع افتراضات لما سيؤوول له الامر و اصدار احكام قبلية ؟؟؟ فما هو الحل في مواقف محرجة تكون فيها الانضار موجهة اليك ؟؟1 نقطة
-
هل يلزم تعلم الانجليزية بشكل كبير اي اتقنها للتعامل مع البرمجة والتطبيقات ام فقط اتعلم اساسيات اللغة الانجليزية؟1 نقطة
-
السلام عليكم، كيف أقوم بوضع نافذة منبثقة تظهر في الصفحة الرئيسية بشكل تلقائي بمجرد دخول الزائر للصفحة؟ دون أن يقوم بالنقر على أي شيء. علماً بأن النافذة التي أريد عبارة عن صورة + زر (X) للإغلاق فقط. وجدت هذه الأداة https://jquerymodal.com/ لكنها للأسف يجب أن أقوم بالنقر على زر معين، وأنا لا أريد الزائر أن ينقر على أي شيء، فقط بمجرد الدخول تظهر النافذة. أريد أبسط كود ممكن، لأنني مبتدئ.1 نقطة
-
مرحباً محمد التوتر شيئ طبيعي وهو رد فعل طبيعي لعقلك لأهمية ما أنت مقبل عليه ويحدث التوتر عادة من الآتي: أنك تفكر أنك سوف تفشل أمام الجمهور فيما ستفعل أو تقول. أنك تكون مضغوط من كثرة التفكير. عدم الخبرة فيما أنت مقبل عليه. فسؤالي هو هل قارنت نفسك وأنت تتحدث مع أصدقاؤك بالتحدث مع أشخاص مثلاً ( قدوتك - زملاؤك في العمل - مديرك ) ؟ أنا متأكد أنك مع أصدقاؤك لا تلقي بالاً لما تقول حتي لو أخطأت لعلمك المسبق وخبرتك من التعامل معهم وتوقعك لردود أفعالهم ... إذاً فهذه عوامل جعلتك تتعامل معهم علي نفس الأساس. أولاً لايوجد في سؤالك أي شيئ يتعلق بأن الموقف محرج ولكن أنت ترهب الموقف لا أكثر ؟ في حالة الخطاب : انت تقلق من أن تتعثر وأنت تلقي الخطاب أو أن تنسي المحتوى وألا يعجب المستمعين وتخاف ردود أفعالهم وهذا أمر طبيعي ويحدث لكل البشر لأنها غريزة ( لأن الإنسان عدو ما يجهل ) ..... الحل هو : أن تجهز الخطاب وتلقيه على أسرتك وبكل جدية وبعد ذلك على أصدقاؤك وتناقش مثلاً شخص لديه الإهتمام بموضوعك وتدعوه لحضور المحاضرة التي ستلقيها وتجعل تركيزك عليه حتى ترتاح وتندمج في الإلقاء لأنه عامل أساسي أن تشعر الجمهور أنك مهتم بهم وأن تتدرب علي طريقة الإلقاء لأنها ستعطيك الثقة. اما عن انتظار شيئ : فأعتقد أنك تنتظر وظيفة أو أمراً هاما تريده بشدة ولذلك يزيد توترك وهذا بسبب أنك تفكر بالسلب ( كالطالب الذي خرج من الإمتحان ولم يتذكر ما كتب في الورقة ولذلك هو يضع إحتمالات لرسوبه ) ...... الحل : يجب في هذه النقطة أن تتفاءل لو الأمر لم يحدث بعد وتترك كل شيئ علي الله ( كما قال صلى الله عليه وسلم : تفاءلوا بالخير تجدوه ) وإذا لم تكن واثقاً أنك ستحصل علي ماتريد لا تضع توقعات عاليه على أنك ستحصل عليه وتبني أفكارك على هذا الأساس حتى لا تؤذي نفسك بتوقعاتك. أما عن المسؤلية: فهي أكثر شيئ يجب أن تشعر فيه بالقلق والتوتر وهذا أمراً طبيعياً لأغلبنا إن لم يكن جميعنا وذلك بسبب أننا جميعنا نقلق أننا لن نكون على قدر من المسؤلية لتحملها أو أننا سنفشل فيها وأنها أكبر مما نحن نستطيع ...... الحل هو أن لا تحكم علي شيئ قبل أن تراه وأن لا تعطي نفسك الشحنة السلبية عن طريق التفكير الرجعي ولا تقول لا أستطيع إتمام هذه المسؤلية بل قل أنه تم إختياري لما لي من مؤهلات تؤهلني لإتمام هذه المسؤلية .... ولن يعطيك أحد مسؤلية إن لم تكن تستحقها شكراً لك.1 نقطة
-
مرحباً دانا يمكنك من خلال الإطلاع على هذا وأيضاً إذا أردتي برنامج جيد أيضاً لمحاكاة الأندرويد على الكمبيوتر فهناك Bluestacks فقط تحملين البرامج عليه وتتعاملين معه كأنه هاتف1 نقطة
-
السلام عليكم لدي اله افتراضية على مايكروسوفت ازور نظام التشغيل لينكس RHEL كيفية يمكنني الاتصال بها من خلال جهازي الكمبيوتر بنظام تشغيل ويندوز1 نقطة
-
اخي تشغيل الة افتراضية بنظام لينكس على نظام ويندوز شيئ مختلف1 نقطة
-
مرحبا يمكنك الإعتماد على هذه المقالة من Microsoft لربط جهازك مع virtual machine على Microsoft Azure من خلال هذا الرابط كما يمكنك مشاهدة هذا الفيديو لكيفية الربط من خلال هذا الرابط1 نقطة
-
يجب أن تكون الشيفرة البرمجية مرتبة ونظيفة وسهلة القراءة قدر الإمكان. هذا ما يسمى بفن البرمجة وهو أخذ مهمة معقدة وبرمجتها بطريقة صحيحة ومقروءة في الوقت ذاته. يساعد نمط كتابة الشيفرة كثيرا في ذلك. الصياغة في الصورة أدناه يوجد صفحة تحوي بعض القواعد المهمة في تركيب الشيفرات البرمجية. سنناقش هذه القواعد وأسبابها بالتفصيل. ملاحظة: لا يوجد قواعد الزامية. لا يوجد قاعدة إلزامية لنمط التكويد. هذه القواعد تعد تفضيلات وليست أساسيات برمجية. الأقواس المعقوصة (Curly Braces) تُكتب الأقواس المعقوصة في معظم مشاريع JavaScript المعقوصة بالطريقة "المصرية" بوضع قوس الفتح في نفس السطر الذي يحوي الكلمة المفتاحية - ليس في سطر جديد. يجب وضع مسافة قبل القوس الافتتاحي كما يلي: if (condition) { // افعل هذا //…. وذاك //…. وذاك } التعليمة المكونة من سطر واحد مثل if(condition) doSomething() تعد حالة طرفية مهمة، فهل يجب استخدام الأقواس فيها؟ فيما يلي بعض البدائل المشروحة. يمكنك قراءتها والحكم على درجة سهولة قراءتها بنفسك: 1- يقوم بعض المبتدئون أحيانًا بما يلي. ما يعد ممارسة خاطئة. فلا حاجة لِلأقواس المعقوصة هنا: if (n < 0) {alert(`Power ${n} is not supported`);} 2- الانتقال إلى سطر جديد بدون استخدام أقواس. تجنب هذا الأمر لأنه يسبب بعض الأخطاء: if (n < 0) alert(`Power ${n} is not supported`); 3- سطر واحد بدون أقواس يُعد مقبولا في حال كان السطر قصيرًا: if (n < 0) alert(`Power ${n} is not supported`); 4- أفضل الطرق: if (n < 0) { alert(`Power ${n} is not supported`); } يمكن استخدام سطر واحد في حالة الشيفرات البرمجية المختصرة مثل: if (cond) return null. لكن استخدام شيفرة برمجية كتلية (كما في رقم 4) هو الأفضل من ناحية سهولة القراءة. طول السطر لا يحب أحدٌ قراءة سطر برمجي طويل. أصبح فصل الأسطر الطويلة ممارسة عامة لدى الجميع. إليك المثال التالي: // تسمح أقواس الفاصلة العليا المائلة ` بتقسيم النص إلى عدة أسطر let str = ` Ecma International's TC39 is a group of JavaScript developers, implementers, academics, and more, collaborating with the community to maintain and evolve the definition of JavaScript. `; بالنسبة للتعليمة البرمجية if: if ( id === 123 && moonPhase === 'Waning Gibbous' && zodiacSign === 'Libra' ) { letTheSorceryBegin(); } يتم الاتفاق على الحد الأقصى لطول السطر البرمجي على مستوى فريق العمل. يكون طول السطر البرمجي غالبا 80 أو 120 محرفَا. مسافة البادئة يوجد نوعان من البادئة "Indents": البادئة الأفقية: 2 أو 4 مسافات: تُصنع البادئة الأفقية بوضع 2 أو 4 مسافات أو باستخدام رمز البادئة الأفقية (الزر Tab). وُجدت اختلافات قديمة حول أيهما أفضل، لكن المسافات هي الأكثر شيوعا هذه الأيام. تتميز المسافات عن الزر Tab بكونها أكثر مرونة أثناء التعديل. مثلًا، يمكننا إزاحة المتغيرات داخل قوس مفتوح كالتالي: show(parameters, aligned, // 5 spaces padding at the left one, after, another ) { // ... } البادئة العمودية: الأسطر الفارغة لفصل الشيفرات البرمجية إلى أجزاء منطقية: يمكن تقسيم حتى دالة بحد ذاتها إلى أجزاء منطقية لتسهل قرائتها. في المثال أدناه، تم تقسيم تعريف المتغيرات وحلقة التكرار الرئيسية والنتيجة عموديا: function pow(x, n) { let result = 1; // <-- for (let i = 0; i < n; i++) { result *= x; } // <-- return result; } يمكنك وضع سطر فارغ حيثما تريد لجعل الشيفرة البرمجية مقروءة بسهولة. لا يجب أن يوجد أكثر من 9 أسطر بدون بادئة عمودية. الفواصل المنقوطة ";" يجب أن توضع فاصلة منقوطة بعد كل تعليمة برمجية، حتى وإن كان من الممكن عدم إضافتها. يوجد بعض اللغات حيث يكون استخدام الفاصلة المنقوطة اختياريا وتُستخدم نادرا. لكن في بعض الحالات في JavaScript لا يحل السطر الجديد محل الفاصلة المنقوطة مما يجعل الشيفرة البرمجية عرضة للخطأ. يمكنك الاطلاع أكثر عن ذلك في جزء بنية الشيفرة البرمجية. إن كنت مبرمجًا متمرسًا في JavaScriptK، يمكنك اختيار نمط تكويد بدون فاصلة منقوطة مثل StandardJS. أو يُفَضَّل استخدام فواصل منقوطة لتجنب الأخطاء. أغلب المبرمجين يضعون فواصل منقوطة. مستويات التداخل تجنب تداخل الشيفرة البرمجية للعديد من المستويات. مثلًا، في الحلقة المتكررة يُفَضَّل استخدام التعليمة continue لتجنب التداخل العميق. مثلا، بدلا من إضافة if شرطية داخلية كالتالي: for (let i = 0; i < 10; i++) { if (cond) { ... // <- مستوى تشعيب إضافي } } يمكننا كتابة: for (let i = 0; i < 10; i++) { if (!cond) continue; ... // <- لا مزيد من التشعيبات } يمكن استخدام الأسلوب ذاته مع if/else و return. مثلًا، نحتاج لجزئين في المثال أدناه. خيار 1: function pow(x, n) { if (n < 0) { alert("Negative 'n' not supported"); } else { let result = 1; for (let i = 0; i < n; i++) { result *= x; } return result; } } خيار 2: function pow(x, n) { if (n < 0) { alert("Negative 'n' not supported"); return; } let result = 1; for (let i = 0; i < n; i++) { result *= x; } return result; } يُعد الخيار 2 أسهل قراءةً من الخيار 1 لأن الحالة الخاصة n < 0 فُحصت مسبقًا. بعد فحص قيمتها يمكننا الانتقال إلى جزء الشيفرة البرمجية الرئيسية بدون الحاجة لتداخل أكثر. موضِع الدوال في حال كنت تكتب العديد من الدوال المساعدة والتي تستخدمها الشيفرة البرمجية، فإن هناك 3 طرق لتنظيم هذه الدوال. 1- تعريف الدوال أعلى الشيفرة البرمجية التي تستخدمها: // تعريفات الدوال function createElement() { ... } function setHandler(elem) { ... } function walkAround() { ... } // الشيفرة التي تستخدمها let elem = createElement(); setHandler(elem); walkAround(); 2- الشيفرة البرمجية أولا ثم الدوال: // الشيفرة التي تستخدم الدوال let elem = createElement(); setHandler(elem); walkAround(); // --- دوال مساعدة --- function createElement() { ... } function setHandler(elem) { ... } function walkAround() { ... } 3- الطريقة المختلطة: تُعرَّف الدالة في أول مكان تستخدم فيه. الخيار الثاني هو الأفضل غالبا. ذلك لأنه عند قراءة شيفرة برمجية، فإننا نريد معرفة ما تقوم به أولا. إن كانت الشيفرة البرمجية في البداية فإن غرضها يكون واضحا مباشرة. أيضا، قد لا نحتاج لقراءة الدوال، خاصة إن كانت وظائفها واضحة من مسمياتها. شروحات لأنماط كتابة الشيفرة يحتوي دليل أنماط التكويد قواعد عامة حول كيفية كتابة شيفرة برمجية. مثلًا، الأقواس المستخدمة، وعدد مسافات البادئة، وأقصى طول للسطر، …الخ. والعديد من التفاصيل الدقيقة. عندما يستخدم جميع أعضاء الفريق الدليل نفسه لنمط التكويد، ستبدو الشيفرة البرمجية موحدة بغض النظر عمن قام بكتابتها. يمكن لأي الفريق الكتابة بنمط تكويد خاص بهم، لكن لا حاجة لذلك لوجود العديد من المعايير العالمية للاختيار منها. بعض الخيارات الشهيرة: Google JavaScript Style Guide Airbnb JavaScript Style Guide Idiomatic.JS StandardJS وغيرها في حال كنت مطورًا مبتدئًا، ابدأ بالشرح المزود هنا. ثم يمكنك الانتقال إلى دليل آخر مما ذكرناه لتتعرف على المزيد من التفاصيل وتختار الأسلوب الأنسب لك. منقحات الصياغة التلقائية (Automated Linters) منقحات الصياغة (Linters): هي عبارة عن أدوات يمكنها فحص نمط الشيفرة البرمجية تلقائيا واقتراح تعديلات لتحسينها. الأمر الذي يجعلها مفيدة أكثر هو قدرتها على العثور على بعض الأخطاء، مثل الخطأ باسم متغير أو دالة ما، لهذا فإنه من المستحسن استخدام منقح صياغة (Linter) حتى لو لم تُرد اتباع نمط تكويد معين. هنا بعض أدوات تنقيح الصياغة المعروفة مثل: JSLint – تُعد من أدوات تنقيح الصياغة الأولى. JSHint – تحوي اعدادات أكثر من JSLint. ESLint – الأحدث تقريبا. كلها تؤدي الغرض ذاته. الكاتب هنا يستخدم ESLint. معظم هذه الأدوات تكون مدمجة مع العديد من المحررات الشهيرة: يجب عليك أن تُفَعِّل الإضافة في المحرر وتحدد نمط التكويد الذي تريده. مثلا، لاستخدام ESLint اتَّبع ما يلي: ثبت Node.js. ثبت ESLint باستخدام الأمر npm install -g eslint (يُعد npm مُثَبِّت حزم JavaScript). أنشئ ملف إعداد وسمِّه ".eslintrc" في ملف مشروع JavaScript الرئيسي (الملف الذي يحتوي على جميع الملفات). ثبت/فعِّل الإضافة لمحررك الذي يدعم ESLint. معظم المحررات تدعم ESLint. هنا مثال على ملف ".eslintrc": { "extends": "eslint:recommended", "env": { "browser": true, "node": true, "es6": true }, "rules": { "no-console": 0, "indent": ["warning", 2] } } التعليمة "extends" هنا تعني أن الإعداد يعتمد على مجموعة إعدادات ESLint الافتراضية "eslint:recommended". يُمكننا تعديل الإعدادات التي نريدها لاحقًا. يمكن أيضا تنزيل مجموعة قواعد نمط التكويد وتوسيعها بدلا من ذلك. انظر في الرابط http://eslint.org/docs/user-guide/getting-started للمزيد من التفاصيل حول كيفية التثبيت. تحتوي بعض المحررات على منقح صياغة مدمج فيها إلا أنها ليست بدقة ESLint. الخلاصة تهدف جميع قواعد بناء الجمل في هذا الفصل (وفي باقي مراجع أنماط التكويد) لرفع مستوى سهولة قراءة الأكواد. وجميع القواعد قابلة للنقاش. عند التفكير في كتابة شيفرة برمجية بشكل أفضل، يجب أن نسأل أنفسنا: "ما الذي يجعل الشيفرة البرمجية أسهل للقراءة والفهم؟" و "ما الذي قد يساعدنا لتجنب الأخطاء؟" يوجد العديد من الأشياء التي يجب الانتباه لها أثناء اختيار نمط تكويد معين. سيتيح لك قراءة العديد من أنماط التكويد معرفة أحدث الأفكار عن أنماط التكويد وأفضل الممارسات. تمارين نمط تكويد سيء الأهمية: 4 ما الخطأ في نمط التكويد أدناه؟ function pow(x,n) { let result=1; for(let i=0;i<n;i++) {result*=x;} return result; } let x=prompt("x?",''), n=prompt("n?",'') if (n<=0) { alert(`Power ${n} is not supported, please enter an integer number greater than zero`); } else { alert(pow(x,n)) } قم بإصلاحه. الحل يمكنك ملاحظة ما يلي: function pow(x,n) // <- لا يوجد مسافات بين المُعاملات { // <- قوس الفتح في سطر مستقل let result=1; // <- عدم وجود مسافات قبل أو بعد = for(let i=0;i<n;i++) {result*=x;} // <- لا يوجد مسافات // يجب أن يكون محتوى { ... } في سطر جديد return result; } let x=prompt("x?",''), n=prompt("n?",'') // <-- ممكنة تقنيا، // لكن يُفَضَّل جعلها في سطرين، بالإضافة إلى عدم وجود مسافات وعدم وجود ; // if (n<0) // <- لا يوجد مسافات بين (n < 0), ويجب وجود سطر فارغ قبلها { // <- قوس الفتح في سطر مستقل // يمكن فصل الأسطر الطويلة في الأسفل حتى تصبح سهلة القراءة alert(`Power ${n} is not supported, please enter an integer number greater than zero`); } else // <- يمكن كتابتها في سطر واحد هكذا: "} else {" { alert(pow(x,n)) // لا يوجد مسافات ولا يوجد ; } بعد تصحيح الأخطاء تصبح الشيفرة البرمجية كما يلي: function pow(x, n) { let result = 1; for (let i = 0; i < n; i++) { result *= x; } return result; } let x = prompt("x?", ""); let n = prompt("n?", ""); if (n < 0) { alert(`Power ${n} is not supported, please enter an integer number greater than zero`); } else { alert( pow(x, n) ); } ترجمة -وبتصرف- للفصل Coding Style من كتاب 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; } اقرأ أيضًا المقال التالي: التعليقات المقال السابق: تنقيح الأخطاء في Chrome1 نقطة
-
يلخِّص هذا الدرس مُميِّزات JavaScript التي تعرَّفنا عليها باختصار في الدروس السابقة مع إيلاء اهتمام خاص لأدق المواضيع. صياغة الشيفرة تنتهي التعليمات البرمجية في JavaScript بفاصلة منقوطة ;: alert('مرحبًا'); alert('بالعالم'); يمكنك إنهاء تعليمة برمجية ببدء سطر جديد، إذ يعد محرف السطر الجديد على أنَّه فاصل للتعليمات: alert('مرحبًا') alert('بالعالم') هذا ما يسمى «الإدراج التلقائي للفاصلة المنقوطة» (automatic semicolon insertion)، لكن يعمل كما هو متوقع في بعض الأحيان مثل الحالة التالية: alert("سيحدث خطأ هنا بعد الرسالة") [1, 2].forEach(alert) تخبرك أغلب أدلة الصياغة بضرورة وضع فاصلة منقوطة بعد كل تعليمة برمجية (statement). انتبه إلى أنَّ الفاصلة المنقوطة غير مطلوبة بعد الكتل البرمجية {...} مثل كل الدوال وحلقات التكرار وغيرها: function f() { // لا حاجة لفاصلة منقوطة بعد التصريح عن دالة } for(;;) { // لا حاجة لفاصلة منقوطة بعد حلقة تكرار } ولكن إذا وضعت فاصلة منقوطة «زائدة» في مكان ما داخل الشيفرة، لن تعدها JavaScript خطأ وستتجاهلها ببساطة. تجد المزيد في فصل «بنية الشيفرة». الوضع الصارم إن أردت تمكين جميع ميزات JavaScript الحديثة كاملًا، يجب أن تستفتح السكربت بالموجه "use strict" مثل: 'use strict'; ... يجب أن يُكتَب هذا الموجِّه في بداية السكربت أو في بداية جسم الدالة. تعمل الشيفرة بدون الموجه "use strict"، لكن هناك بعض الميزات تبقى على صورتها القديمة «المتوافقة» (compatible way). عمومًا، يُفضَّل العمل بالوضع الحديث دومًا. تُفعِّل بعض مميزات JavaScript الحديثة، مثل الأصناف التي ستتعرف عليها لاحقًا، الوضع الصارم ضمنيًّا. تجد المزيد في فصل «الوضع الصارم: ». المتغيرات يمكنك تعريف المتغيرات عبر: let const (متغير ثابت لا يمكن تغيير قيمته) var (نمط قديم سوف تتعرف عليه لاحقًا) يمكن أن يحتوي اسم المتغير على: حروف وأعداد، لكن الحرف الأول لا يجب أن يكون عددًا. الرمزان _ و $. يُسمَح أيضًا باستخدام الحروف الهجائية غير اللاتينية والحروف الهيروغليفية، ولكنها غير شائعة الاستخدام. يمكنك تخزين أي قيمة داخل المتغير مثل: let x = 5; x = "عبد الله"; إليك سبعة أنواع من البيانات: number: يمثِّل الأعداد العشرية والأعداد الصحيحة. string: يمثِّل السلاسل النصية. boolean: يمثِّل القيم المنطقية: true/false. null: هذا النوع يعني أن القيمة «فارغة» أو «غير موجودة». undefined: هذا النوع يعني أن القيمة «غير معرّفة». object و symbol: يمثِّل الأول بنية معقدة من البيانات والثاني مُعرِّفًا فريدًا، لم نسلط الضوء عليهما بعد. يرجع المعامل typeof نوع القيمة، مع استثناءين: typeof null == "object" // خطأ من أصل اللغة typeof function(){} == "function" // تعامل الدوال معاملةً خاصة تجد المزيد في فصل «المتغيرات وأنواع البيانات». الدوال التفاعلية لمَّا كنا نستعمل المتصفح بيئة عمل لنا، فستكون دوال واجهة المستخدم الأساسية هي: prompt(question, [default]): هي دالة تطرح السؤال question، ثم ترجع ما أدخله المستخدم أو تُرجع القيمة null في حال ألغى المستخدم عملية الإدخال (بالضغط على الزر "cancel"). confirm(question): هي دالة تطرح السؤال question ثم تُتيح لك الاختيار بين «موافق» (Ok) أو «إلغاء» (Cancel) ثم تعاد قيمة منطقية، true/false، تمثِّل هذا الاختيار. alert(message): دالةٌ تُظهِر لك الرسالة message المُمرَّرة إليها فقط. تظهر جميع هذه الدوال نافذة صغيرة تدعى «النافذة المنبثقة الشرطية» (modal window، وهي عنصر تحكم رسومي)، فهي توقف تنفيذ الشيفرة وتمنع المستخدم من التفاعل مع صفحة الويب حتى يتفاعل معها. جرب تنفيذ المثال التالي: let userName = prompt("ما اسمك؟", "محمد"); let isTeaWanted = confirm("هل تريد كوبًا من الشاي؟"); alert( "الزائر: " + userName ); // محمد alert( "أيريد كوبًا من الشاي؟" + isTeaWanted ); // true تجد المزيد في فصل «الدوال التفاعلية». المعاملات تدعم JavaScript المعاملات التالية: المعاملات الحسابية معاملات الحساب الأساسية وهي * + - / بالإضافة إلى المعامل % لإيجاد باقي القسمة، و أيضًا معامل القوة **. يدمج معامل الجمع الثنائي + السلاسل النصية. إذا كان أحد العاملين عبارة عن سلسلة نصية، فسيُحوَّل الآخر إلى سلسلة نصية أيضًا مثل: alert( '1' + 2 ); // '12', سلسلة نصية alert( 1 + '2' ); // '12', سلسلة نصية معاملات الإسناد هنالك معامل إسناد بسيط وهو a = b ومعامل إسناد مركَّب مثل a *= 2. المعاملات الثنائية تعمل المعاملات الثنائية في المستوى المنخفض للبيانات أي في مستوى البتات، لذا ارجع إلى توثيقها في موسوعة حسوب إن لزمتك. المعاملات الشرطية المعامل الوحيد الذي يحوي ثلاث عوامل هو معامل علامة استفهام ? أو كما يسمى «المعامل الثلاثي»: cond ? resultA : resultB إذا تحقق الشرط cond، يُرجع المعامل القيمة resultA؛ خلا ذلك، يُرجع القيمة resultB. المعاملات المنطقية ينفِّذ المعاملان المنطقيان AND && و OR || «دارة تقييم قصيرة» (short-circuit evaluation) ثمَّ يرجعان القيمة المُقيَّمة الناتجة. يُحوِّل المعامل المنطقي NOT ! العامل الذي استدعي معه لقيمة منطقية ثم يُرجع القيمة المعاكسة له. معاملات الموازنة يُحوّل معامل المساواة == القيم المختلفة إلى أعداد ثم يتحقق من المساواة (ما عدا القيمة الفارغة null والقيمة غير المُعرَّفة undefined التي تساوي بعضها بعضًا). إليك المثال التالي: alert( 0 == false ); // true alert( 0 == '' ); // true وكذلك تفعل معاملات الموازنة الأخرى. فيما يخص معامل المساواة الصارمة === لا يُوحَّد نوع القيم المراد التحقق من تساويها، إذ تعد عملية التحقق من نوعين مختلفين بالنسبة لهذا المعامل عملية غير محققة دومًا (أي النوعان غير متساويين). تعدُّ القيمة الفارغة null والقيمة غير المحددة undefined حالة خاصة، إذ تساوي إحداهما الأخرى (عبر المعامل ==) ولا تساويان أي شيء آخر. توازن إشارة الأكبر وإشارة الأصغر >/< بين كل محرفين متقابلين من السلسلتين النصيّتين المراد موازنتها مع بعضهما، وأما بالنسبة لموازنة أنواع البيانات الأخرى، فتُحوَّل أولًا إلى أعداد ثم توازن. معاملات أخرى هنالك معاملات أخرى غير شائعة الاستخدام مثل معامل الفاصلة. تجد المزيد في الفصول التالية: فصل «المعاملات في JavaScript» وفصل «معاملات الموازنة» وفصل «المعاملات المنطقية». حلقات التكرار لقد غطينا ثلاثة أنواع من حلقات التكرار هي: // 1 while (condition) { ... } // 2 do { ... } while (condition); // 3 for(let i = 0; i < 10; i++) { ... } المتغير الذي يُعرَّف داخل حلقة التكرار for(let...) مرئيٌّ داخلها فقط، ولكن يمكنك حذف let وإعادة استخدام المتغير. يأمر الموجهان break/continue بإنهاء التكرار الحالي والعودة للحلقة (continue) أو الخروج من الحلقة بأكملها (break). يمكن استخدام اللافتات (labels) للتحكم بالحلقات المتداخلة وإنهائها مثلًا. تجد المزيد في فصل «حلقتي التكرار while و for». وسوف نتعرف لاحقًا على المزيد من حلقات التكرار. التعبير switch يمكن للتعبير switch أن يحل محل التعبير الشرطي if، إذ يمنحك طريقة وصفية أكثر لموازنة قيمة ما مع عدَّة قيم. ويستخدم معامل المساواة الصارمة === في عملية الموازنة. إليك المثال التالي: let age = prompt('كم عمرك؟', 18); switch (age) { case 18: alert("لن يعمل"); // الناتج سلسلة نصية وليس عدد case "18": alert("يعمل"); break; default: alert("أي قيمة غير مساوية للقيمتين السابقتين"); } تجد المزيد في فصل «التعبير switch». الدوال إليك ثلاث طرائق لإنشاء دالة في JavaScript: 1- التصريح عن دالة: تُعَّرف الدالة في سياق الشيفرة الرئيسية (ضمن النطاق العام) بشكل منفصل عن بقية التعليمات: function sum(a, b) { let result = a + b; return result; } 2- تعبير دالة: تُنشَأ الدالة داخل تعبير برمجي أو داخل كتلة برمجية أخرى: let sum = function(a, b) { let result = a + b; return result; }; 3- الدوال السهمية: // التعبير في الطرف الأيمن let sum = (a, b) => a + b; // يمكن أن تمتد على عدة أسطر باستعمال الأقواس المعقوصة شرط إعادة شيء let sum = (a, b) => { // ... return a + b; } // دون معاملات let sayHi = () => alert("مرحبًا"); // مع معامل وحيد let double = n => n * 2; قد تحتوي الدوال على متغيرات محلية، إذ تُعرَّف تلك المتغيرات داخل جسم الدالة وتبقى مرئيًّة داخل الدالة فقط. يمكن أن تملك المعاملات قيمًا افتراضية مثل: function sum(a = 1, b = 2) {...}. تُرجع الدوال قيمة ما دائمًا. وإذا لم يكن هناك الموجه return، فستكون تلك القيمة المعادة القيمة undefined. تجد المزيد في فصل «الدوال». المزيد قادم كان ما سبق قائمةً مختصرةً بميزات JavaScript. لقد تعرّفت إلى الآن على الأساسيات في JavaScript. أمَّا في الدروس القادمة، فستتعرف على المزيد من المميزات والمواضيع المتقدمة، لذا خذ استراحة وتهيَّأ جيدًا لما هو قادم. ترجمة -وبتصرف- للفصل JavaScript specials من كتاب 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; } اقرأ أيضًا المقال التالي: تنقيح الأخطاء في Chrome المقال السابق: تعابير الدوال والدوال السهمية1 نقطة