در Gleam «توابع» با نحوهی نگارش pub fn تعریف میشوند.
pub fn add(x: Int, y: Int) -> Int {
x + y
}
این تابع دو آرگومان میگیرد که هر دو از نوع Int هستند و مقداری از نوع Int برمیگرداند. در Gleam کلیدواژهی return وجود ندارد؛ مقدار آخرین عبارت در یک تابع همیشه بهصورت ضمنی برگردانده میشود.
حاشیهنویسی نوع برای آرگومانها و نوع بازگشتی اختیاریاند و Gleam همیشه کد شما را بهطور کامل از نظر نوع بررسی میکند. معمولاً برنامهنویسان Gleam برای شفافیت به توابع خود حاشیهنویسی نوع میدهند، اما اگر بخواهید میتوانید آنها را حذف کنید.
pub fn add(x, y) {
x + y
}
یک تابع را میتوان با نحوهی نگارش function_name(argument1, argument2) فراخوانی کرد.
pub fn double(x: Int) -> Int {
// Call the add function defined above
add(x, x)
}
در Gleam «متغیرها» با نحوهی نگارش let name = expression تعریف میشوند.
pub fn main() {
let count = 1
}
میتوان متغیرها را همراه با حاشیهنویسی نوع تعریف کرد. اینها مانند آرگومانهای تابع اختیاریاند، هرچند بیشتر برنامهنویسان Gleam برای کوتاهنویسی حاشیهنویسی نوع متغیرها را حذف میکنند.
pub fn main() {
let count: Int = 1
}
در Gleam «رشتهها» با کوتیشن دوگانه نوشته میشوند.
pub fn greeting() {
"Hello, world!"
}
از کامنتها میتوان برای گذاشتن یادداشت برای سایر توسعهدهندگانی که کد منبع را میخوانند استفاده کرد. کامنتها در Gleam تکخطیاند و با // شروع میشوند.
pub fn main() {
// This is a comment
let x = 1
}
در این تمرین میخواهید کدی بنویسید که به شما کمک کند از کتاب آشپزی محبوبتان یک لازانیای عالی بپزید.
شما پنج کار دارید که همه به زمان صرفشده برای پخت لازانیا مربوط میشوند.
تابع expected_minutes_in_oven را تعریف کنید که هیچ آرگومانی نمیگیرد و برمیگرداند که لازانیا باید چند دقیقه در فر بماند. طبق کتاب آشپزی، زمان مورد انتظار در فر بر حسب دقیقه ۴۰ است:
expected_minutes_in_oven()
// -> 40
تابع remaining_minutes_in_oven را تعریف کنید که دقیقههای واقعیای را که لازانیا در فر بوده به عنوان آرگومان میگیرد و بر اساس زمان مورد انتظار در فر از کار قبلی برمیگرداند که لازانیا چند دقیقه دیگر باید در فر بماند.
remaining_minutes_in_oven(30)
// -> 10
تابع preparation_time_in_minutes را تعریف کنید که تعداد لایههایی را که به لازانیا اضافه کردهاید به عنوان آرگومان میگیرد و برمیگرداند که چند دقیقه صرف آمادهسازی لازانیا کردهاید، با این فرض که آمادهسازی هر لایه ۲ دقیقه طول میکشد.
preparation_time_in_minutes(2)
// -> 4
تابع total_time_in_minutes را تعریف کنید که دو آرگومان میگیرد: آرگومان اول تعداد لایههایی است که به لازانیا اضافه کردهاید و آرگومان دوم تعداد دقیقههایی است که لازانیا در فر بوده است. تابع باید برگرداند که در مجموع چند دقیقه روی پخت لازانیا کار کردهاید، یعنی مجموع زمان آمادهسازی بر حسب دقیقه و زمانی که لازانیا تا این لحظه در فر گذرانده است.
total_time_in_minutes(3, 10)
// -> 16
تابع alarm را تعریف کنید که هیچ آرگومانی نمیگیرد و پیامی برمیگرداند که نشان میدهد لازانیا آمادهی خوردن است.
alarm()
// -> "Ding!"