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
}
در این تمرین قرار است کدی بنویسید که به شما کمک کند از کتاب آشپزی محبوبتان یک لازانیای عالی بپزید.
چهار کار پیش رو دارید که همگی به زمان صرفشده برای پخت لازانیا مربوط میشوند.
ثابت OvenTime را با تعداد دقیقههایی که لازانیا باید در فر بماند تعریف کنید. طبق کتاب آشپزی، زمان مورد انتظار پخت در فر ۴۰ دقیقه است:
OvenTime
// => 40
تابع RemainingOvenTime() را تعریف کنید که تعداد دقیقههایی را که لازانیا تا این لحظه در فر بوده است به عنوان پارامتر میگیرد و بر اساس زمان مورد انتظار پخت در فر که در تمرین قبلی تعریف کردید، برمیگرداند که لازانیا چند دقیقهی دیگر باید در فر بماند.
func RemainingOvenTime(actual int) int {
// TODO
}
RemainingOvenTime(30)
// => 10
تابع PreparationTime را تعریف کنید که تعداد لایههایی را که به لازانیا اضافه کردهاید به عنوان پارامتر میگیرد و برمیگرداند که چند دقیقه صرف آمادهسازی لازانیا کردهاید، با این فرض که آمادهسازی هر لایه ۲ دقیقه طول میکشد.
func PreparationTime(numberOfLayers int) int {
// TODO
}
PreparationTime(2)
// => 4
تابع ElapsedTime را تعریف کنید که دو پارامتر میگیرد: پارامتر اول تعداد لایههایی است که به لازانیا اضافه کردهاید و پارامتر دوم تعداد دقیقههایی است که لازانیا در فر بوده است.
تابع باید برگرداند که در مجموع چند دقیقه روی پخت لازانیا کار کردهاید؛ این مقدار برابر است با مجموع زمان آمادهسازی بر حسب دقیقه و زمانی که لازانیا تا این لحظه در فر سپری کرده است.
func ElapsedTime(numberOfLayers, actualMinutesInOven int) int {
// TODO
}
ElapsedTime(3, 20)
// => 26