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 وارد کند.
به این کار سیستم ماژول نیز میگویند.
نمونهی خوبی از این، نحوهی کار همهی testهاست.
هر تمرین حداقل یک فایل دارد، برای مثال lasagna.js، که پیادهسازی را در خود دارد.
پیادهسازی از فایل export میشود تا بتوان آن را در فایل دیگری وارد کرد.
علاوه بر این، حداقل یک فایل دیگر هم وجود دارد، برای مثال lasagna.spec.js، که testها را در خود دارد.
این فایل برای test کردن پیادهسازی، موجودیتهای عمومی (یعنی exportشده) را import میکند:
// 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 را تعریف کنید که نشان میدهد لازانیا چند دقیقه باید در فر بماند. این ثابت باید export شود. طبق کتاب آشپزی، زمان مورد انتظار در فر بر حسب دقیقه 40 است.
تابع remainingMinutesInOven را پیادهسازی کنید که دقیقههای واقعی که لازانیا در فر بوده است را بهعنوان پارامتر میگیرد و برمیگرداند که لازانیا چند دقیقه دیگر باید در فر بماند، بر اساس زمان مورد انتظار در فر بر حسب دقیقه از کار قبلی.
remainingMinutesInOven(30);
// => 10
تابع preparationTimeInMinutes را پیادهسازی کنید که تعداد لایههایی که به لازانیا اضافه کردهاید را بهعنوان پارامتر میگیرد و برمیگرداند که چند دقیقه صرف آمادهسازی لازانیا کردهاید، با فرض اینکه آمادهسازی هر لایه ۲ دقیقه طول میکشد.
preparationTimeInMinutes(2);
// => 4
تابع totalTimeInMinutes را پیادهسازی کنید که دو پارامتر میگیرد: پارامتر numberOfLayers تعداد لایههایی است که به لازانیا اضافه کردهاید و پارامتر actualMinutesInOven تعداد دقیقههایی است که لازانیا در فر بوده است. تابع باید برگرداند که در کل چند دقیقه روی پخت لازانیا کار کردهاید، که برابر است با مجموع زمان آمادهسازی بر حسب دقیقه و زمانی که لازانیا تا این لحظه در فر بوده است.
totalTimeInMinutes(3, 20);
// => 26
در Exercism ثبتنام کنید تا JavaScript را همراه با 37 مفهوم159 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.