letعبارت let برای ساختن یک «دامنهی محلی» به کار میرود و در چند موقعیت کاربرد دارد:
میتوانید بیشتر کارها را داخل یک عبارت let انجام دهید، از جمله «تجزیهی ساختاری» (جزئیات بیشتر در تمرینهای بعدی)، اما تعریف یک «نوع سفارشی» یا «اسم مستعار نوع» جدید ممکن نیست.
let
cube x = x * x * x
in
cube a + cube b + cube c
beginWithPattern : Size -> Padding -> Pattern -> GameOfLife
beginWithPattern minimumSize padding pattern =
let
size = calculateSize minimumSize padding pattern
center = Size.center size
centeredPattern = Pattern.centerAt center pattern
dimensions = { width = size, height = size }
deadCells = Matrix.create dimensions Dead
in
GameOfLife (bringPatternToLife deadCells centeredPattern)
برای تولدتان یک کتاب آشپزی جدید هدیه گرفتهاید و میخواهید بفهمید که آیا دستور پخت لازانیا در آن بهتر از کتاب آشپزی مورد علاقهی فعلیتان است یا نه. در این تمرین میخواهید کدی بنویسید که به شما در پخت لازانیا از کتاب آشپزی جدید کمک کند.
همخانهیتان هنوز در اداره مشغول است و میخواهد بداند لازانیا چه ساعتی آماده میشود تا مطمئن شود که به موقع برمیگردد.
برای محاسبهی زمانی که لازانیا آماده میشود، یک «تابع» ایجاد کنید. برای ساده و گویا شدن کد، باید از یک «عبارت let» استفاده کنید.
تابع remainingTimeInMinutes را تعریف کنید که دو «پارامتر» میگیرد و بدنهی آن یک عبارت let است. پارامتر اول تعداد لایههای لازانیا است و پارامتر دوم تعداد دقیقههایی است که از شروع پخت گذشته است.
مقدار expectedMinutesInOven را (در بخش let عبارت let) تعریف کنید تا بررسی کنید لازانیا چند دقیقه باید در فر بماند. طبق کتاب آشپزی، زمان مورد انتظار در فر بر حسب دقیقه 40 است:
expectedMinutesInOven
--> 40
مقدار preparationTimeInMinutes را (در بخش let عبارت let) تعریف کنید که تعداد لایههای لازانیا را به عنوان پارامتر میگیرد و تعداد دقیقههایی که برای آمادهسازی لازانیا لازم است را برمیگرداند. با فرض اینکه آمادهسازی هر لایه 2 دقیقه طول میکشد.
preparationTimeInMinutes 3
--> 6
تعداد دقیقههای باقیمانده تا آماده شدن لازانیا را برگردانید (در بخش in عبارت let). این مقدار برابر است با مجموع preparationTimeInMinutes و expectedMinutesInOven منهای تعداد دقیقههایی که از شروع پخت گذشته است.
remainingTimeInMinutes 3 10
--> 6 + 40 - 10 = 36