مسیرها
/
Go
Go
/
تمرین‌ها
/
لازانیای دل‌انگیز گوفر
لازانیای دل‌انگیز گوفر

لازانیای دل‌انگیز گوفر

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

مقدمه

Go یک زبان برنامه‌نویسی ایستا نوع‌دهی‌شده و کامپایل‌شونده است. این تمرین سه ویژگی اصلی زبان را معرفی می‌کند: بسته، تابع و متغیر.

بسته

برنامه‌های Go در قالب بسته‌ها سازماندهی می‌شوند. بسته مجموعه‌ای از فایل‌های منبع است که در یک پوشه قرار دارند. همه‌ی فایل‌های منبع در یک پوشه باید نام بسته‌ی یکسانی داشته باشند. وقتی بسته‌ای وارد می‌شود، فقط موجودیت‌هایی (توابع، انواع، متغیرها، ثابت‌ها) که نامشان با حرف بزرگ شروع می‌شود می‌توانند استفاده یا دسترسی شوند. سبک توصیه‌شده‌ی نام‌گذاری در Go این است که شناسه‌ها با camelCase نام‌گذاری می‌شوند، به‌جز آن‌هایی که قرار است در سراسر بسته‌ها قابل دسترسی باشند و باید PascalCase باشند.

package lasagna

متغیر

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

متغیرها می‌توانند با مشخص کردن صریح نوع تعریف شوند:

var explicit int // Explicitly typed

همچنین می‌توانید از یک مقدار اولیه استفاده کنید، و کامپایلر نوع متغیر را مطابق نوع مقدار اولیه تعیین می‌کند.

implicit := 10   // Implicitly typed as an int

پس از اعلان، می‌توان با عملگر = به متغیرها مقدار اختصاص داد. پس از اعلان، نوع متغیر هرگز نمی‌تواند تغییر کند.

count := 1 // Assign initial value
count = 2  // Update to new value

count = false // This throws a compiler error due to assigning a non `int` type

ثابت

ثابت‌ها هم مانند متغیرها نگهدارنده‌ی یک داده هستند، اما مقدارشان در طول اجرای برنامه نمی‌تواند تغییر کند.

ثابت‌ها با کلیدواژه‌ی const تعریف می‌شوند و می‌توانند اعداد، کاراکترها، رشته‌ها یا «مقادیر منطقی» باشند:

const Age = 21 // Defines a numeric constant 'Age' with the value of 21

تابع

توابع Go صفر یا چند پارامتر می‌پذیرند. پارامترها باید صریحاً نوع‌دهی شوند، هیچ استنتاج نوعی وجود ندارد.

مقادیر با کلیدواژه‌ی return از توابع برگردانده می‌شوند.

یک تابع با مشخص کردن نام تابع و فرستادن آرگومان برای هر یک از پارامترهای تابع فراخوانی می‌شود.

توجه کنید که Go از دو نوع توضیح پشتیبانی می‌کند. توضیحات تک‌خطی با // شروع می‌شوند و توضیحات چندخطی بین /* و */ قرار می‌گیرند.

package greeting

// Hello is a public function.
func Hello (name string) string {
    return hi(name)
}

// hi is a private function.
func hi (name string) string {
    return "hi " + name
}

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

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

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

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

ثابت OvenTime را با تعداد دقیقه‌هایی که لازانیا باید در فر بماند تعریف کنید. طبق کتاب آشپزی، زمان مورد انتظار پخت در فر ۴۰ دقیقه است:

OvenTime
// => 40

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

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

func RemainingOvenTime(actual int) int {
    // TODO
}

RemainingOvenTime(30)
// => 10

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

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

func PreparationTime(numberOfLayers int) int {
    // TODO
}

PreparationTime(2)
// => 4

4. زمان سپری‌شده‌ی کار را بر حسب دقیقه محاسبه کنید

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

func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
    // TODO
}

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

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

در Exercism ثبت‌نام کنید تا Go را همراه با 34 مفهوم166 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.