JavaScript لغة ديناميكية، تدعم أساليب البرمجة الكائنية والأمرية والتعريفية (مثل البرمجة الوظيفية).
توجد عدة طرق أساسية لإسناد القيم إلى الأسماء في JavaScript، إما باستخدام المتغيرات أو الثوابت. في Exercism، تُكتب المتغيرات دائمًا بنمط camelCase، وتُكتب الثوابت بنمط SCREAMING_SNAKE_CASE. لا يوجد دليل رسمي يجب اتباعه، ولكل شركة أو مؤسسة دليل أسلوب خاص بها. لا تتردد في كتابة المتغيرات بالطريقة التي تناسبك. وميزة كتابتها بالطريقة التي أُعدّت بها التمارين هي أنها ستُبرَز بشكل مختلف في واجهة الويب وفي معظم بيئات التطوير المتكاملة.
يمكن تعريف المتغيرات في JavaScript باستخدام الكلمة المفتاحية const أو let أو var.
يمكن للمتغير أن يشير إلى قيم مختلفة على مدار عمره عند استخدام let أو var.
على سبيل المثال، يمكن تعريف myFirstVariable وإعادة تعريفه مرات عديدة باستخدام عامل الإسناد =:
let myFirstVariable = 1;
myFirstVariable = 'Some string';
myFirstVariable = new SomeComplexClass();
وعلى عكس let وvar، لا يمكن إسناد قيمة إلا مرة واحدة للمتغيرات المعرّفة بـ const.
وهذا ما يُستخدم لتعريف الثوابت في JavaScript.
const MY_FIRST_CONSTANT = 10;
// Can not be re-assigned.
MY_FIRST_CONSTANT = 20;
// => TypeError: Assignment to constant variable.
💡 في تمرين مفاهيمي لاحق، سيتم استعراض وشرح الفرق بين إسناد الثابت، وربط الثابت، وقيمة الثابت.
في JavaScript، تُغَلَّف وحدات الوظائف في الدوال، وعادةً ما تُجمَّع الدوال معًا في الملف نفسه إذا كانت تنتمي إلى بعضها.
لهذه الدوال معاملات (حتى تستقبل الوسائط)، ويمكنها أن تُرجع قيمة باستخدام الكلمة المفتاحية return.
تُستدعى الدوال باستخدام صيغة ().
function add(num1, num2) {
return num1 + num2;
}
add(1, 3);
// => 4
في هذا المثال، اسم الدالة هو add.
ولها معاملان، num1 وnum2.
وهي تُرجع قيمة: ناتج التعبير num1 + num2
ثم تُستدعى الدالة add باستخدام وسيطين: 1 و3.
ونتيجة الدالة، أي القيمة المُرجَعة، هي 4.
💡 في JavaScript توجد طرق مختلفة كثيرة لتعريف دالة.
بعض هذه الطرق الأخرى تبدو مختلفة عن استخدام الكلمة المفتاحية function.
يحاول المسار تقديمها تدريجيًا، لكن إن كنت تعرفها بالفعل، فلا تتردد في استخدام أي منها.
في معظم الحالات، استخدام إحداها أو الأخرى ليس أفضل ولا أسوأ.
لجعل function أو ثابت أو متغير متاحًا في ملفات أخرى، يجب تصديره باستخدام الكلمة المفتاحية export.
ويمكن لملف آخر بعد ذلك أن يستورد هذه العناصر باستخدام الكلمة المفتاحية import.
ويُعرف هذا أيضًا بنظام الوحدات.
ومن الأمثلة الرائعة على ذلك طريقة عمل جميع الاختبارات.
لكل تمرين ملف واحد على الأقل، مثل lasagna.js، يحتوي على التنفيذ.
يُصدَّر التنفيذ من الملف، مما يجعله متاحًا للاستيراد في ملف آخر.
بالإضافة إلى ذلك، يوجد ملف آخر على الأقل، مثل lasagna.spec.js، يحتوي على الاختبارات.
يستورد هذا الملف الكيانات العامة (المُصدَّرة بـ export) لاختبار التنفيذ:
// file.js
export const MY_VALUE = 10;
export function add(num1, num2) {
return num1 + num2;
}
// file.spec.js
import { MY_VALUE, add } from './file';
add(MY_VALUE, 5);
// => 15
صديقة لوسيان في طريقها إلى المنزل، ولم يطبخ بعد عشاء ذكراهما السنوية!
في هذا التمرين، ستكتب بعض الكود لمساعدة لوسيان على طهي لازانيا شهية من كتاب الطبخ المفضل لديه.
لديك أربع مهام تتعلق بالوقت المستغرق في طهي اللازانيا.
عرّف الثابت EXPECTED_MINUTES_IN_OVEN الذي يمثل عدد الدقائق التي ينبغي أن تبقى فيها اللازانيا في الفرن. يجب أن يكون مُصدَّرًا. وفقًا لكتاب الطبخ، فإن وقت الفرن المتوقع بالدقائق هو 40.
نفّذ الدالة remainingMinutesInOven التي تأخذ الدقائق الفعلية التي أمضتها اللازانيا في الفرن بوصفها معاملًا و_تُرجع_ عدد الدقائق التي لا تزال اللازانيا بحاجة إلى بقائها في الفرن، استنادًا إلى وقت الفرن المتوقع بالدقائق من المهمة السابقة.
remainingMinutesInOven(30);
// => 10
نفّذ الدالة preparationTimeInMinutes التي تأخذ عدد الطبقات التي أضفتها إلى اللازانيا بوصفها معاملًا و_تُرجع_ عدد الدقائق التي استغرقتها في تحضير اللازانيا، بافتراض أن تحضير كل طبقة يستغرق دقيقتين من وقتك.
preparationTimeInMinutes(2);
// => 4
نفّذ الدالة totalTimeInMinutes التي تأخذ معاملين اثنين: المعامل numberOfLayers هو عدد الطبقات التي أضفتها إلى اللازانيا، والمعامل actualMinutesInOven هو عدد الدقائق التي أمضتها اللازانيا في الفرن. ينبغي أن تُرجع الدالة إجمالي عدد الدقائق التي عملتها في طهي اللازانيا، وهو مجموع وقت التحضير بالدقائق، والوقت بالدقائق الذي أمضته اللازانيا في الفرن حتى هذه اللحظة.
totalTimeInMinutes(3, 20);
// => 26
سجّل في Exercism لتتعلّم وتتقن JavaScript عبر 37 مفهومًا159 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.