مسیرها
/
JavaScript
JavaScript
/
تمرین‌ها
/
لازانیای لذیذ لوسین
لازانیای لذیذ لوسین

لازانیای لذیذ لوسین

تمرین یادگیری

مقدمه

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.
Note

💡 در یک تمرین مفهومی بعدی، تفاوت میان انتساب ثابت، اتصال ثابت و مقدار ثابت بررسی و توضیح داده می‌شود.

اعلان تابع

در JavaScript، واحدهای عملکرد در توابع کپسوله می‌شوند و معمولاً توابعی که به هم تعلق دارند در یک فایل کنار هم قرار می‌گیرند. این توابع پارامتر دارند (تا بتوانند آرگومان بگیرند) و می‌توانند با استفاده از کلیدواژه‌ی return مقداری را برگردانند. فراخوانی توابع با () انجام می‌شود.

function add(num1, num2) {
  return num1 + num2;
}

add(1, 3);
// => 4

در این مثال، اسم تابع add است. این تابع دو پارامتر دارد: num1 و num2. مقداری را برمی‌گرداند: نتیجه‌ی عبارت num1 + num2.

سپس تابع add با دو آرگومان فراخوانی می‌شود: 1 و 3. نتیجه‌ی تابع، یعنی مقدار برگشتی، 4 است.

Note

💡 در 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

دستورالعمل‌ها

دوست‌دختر لوسیان در راه خانه است و لوسیان هنوز شام سالگردشان را نپخته است!

در این تمرین، می‌خواهید کدی بنویسید تا به لوسیان کمک کنید لازانیای عالی از کتاب آشپزی محبوبش بپزد.

چهار کار مرتبط با زمان صرف‌شده برای پخت لازانیا دارید.

1. زمان مورد انتظار در فر بر حسب دقیقه را تعریف کنید

ثابت EXPECTED_MINUTES_IN_OVEN را تعریف کنید که نشان می‌دهد لازانیا چند دقیقه باید در فر بماند. این ثابت باید export شود. طبق کتاب آشپزی، زمان مورد انتظار در فر بر حسب دقیقه 40 است.

2. زمان باقی‌مانده در فر بر حسب دقیقه را محاسبه کنید

تابع remainingMinutesInOven را پیاده‌سازی کنید که دقیقه‌های واقعی که لازانیا در فر بوده است را به‌عنوان پارامتر می‌گیرد و برمی‌گرداند که لازانیا چند دقیقه دیگر باید در فر بماند، بر اساس زمان مورد انتظار در فر بر حسب دقیقه از کار قبلی.

remainingMinutesInOven(30);
// => 10

3. زمان آماده‌سازی بر حسب دقیقه را محاسبه کنید

تابع preparationTimeInMinutes را پیاده‌سازی کنید که تعداد لایه‌هایی که به لازانیا اضافه کرده‌اید را به‌عنوان پارامتر می‌گیرد و برمی‌گرداند که چند دقیقه صرف آماده‌سازی لازانیا کرده‌اید، با فرض اینکه آماده‌سازی هر لایه ۲ دقیقه طول می‌کشد.

preparationTimeInMinutes(2);
// => 4

4. زمان کل کار بر حسب دقیقه را محاسبه کنید

تابع totalTimeInMinutes را پیاده‌سازی کنید که دو پارامتر می‌گیرد: پارامتر numberOfLayers تعداد لایه‌هایی است که به لازانیا اضافه کرده‌اید و پارامتر actualMinutesInOven تعداد دقیقه‌هایی است که لازانیا در فر بوده است. تابع باید برگرداند که در کل چند دقیقه روی پخت لازانیا کار کرده‌اید، که برابر است با مجموع زمان آماده‌سازی بر حسب دقیقه و زمانی که لازانیا تا این لحظه در فر بوده است.

totalTimeInMinutes(3, 20);
// => 26
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
JavaScript Exercism

آماده‌اید لازانیای لذیذ لوسین را شروع کنید؟

در Exercism ثبت‌نام کنید تا JavaScript را همراه با 37 مفهوم159 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.