در F#، به هر چیزی که نوع داشته باشد و بتوان تعریفش کرد، یک «مقدار» میگویند. این شامل «مقادیر منطقی»، اعداد صحیح و فهرستها میشود، و همچنین توابع. مقادیر صحیح بهصورت یک یا چند رقم (پشتسرهم) تعریف میشوند و از عملگرهای ریاضی پیشفرض پشتیبانی میکنند.
به اختصاص دادن یک مقدار به یک اسم، یک «پیوند» میگویند. پیوندها تغییرناپذیرند و همین آنها را شبیه ثابتهای زبانهای دیگر میکند. پیوندها با کلیدواژهی let تعریف میشوند.
چون F# زبانی با نوع ایستا است، هر پیوند یک نوع دارد. مشخص کردن نوع یک پیوند برای بیشتر پیوندها اختیاری است، چون «استنتاج نوع» در F# معمولاً میتواند نوع را بر اساس مقدار آن استنباط کند.
// Automatically inferred type
let fingers = 10
توابع هم پیوندهای معمولیاند، اما با یک یا چند پارامتر. یک تابع بهطور خودکار آخرین عبارت خود را برمیگرداند. استنتاج نوع برای بیشتر توابع هم کار میکند: با تحلیل اینکه تابع با چه مقادیری فراخوانی میشود و چه مقداری را برمیگرداند.
// Automatically inferred types for parameters and return type
let add x y = x + y
فراخوانی یک تابع با نوشتن اسم آن و پاس دادن آرگومان برای هر یک از پارامترهای تابع انجام میشود.
let five = add 2 3
اگر نوع یک پیوند قابل استنباط نباشد، کامپایلر خطا گزارش میکند. برای رفع این مشکل، نوع پیوند را صریح مشخص کنید.
// Explicit type annotation
let fingers: int = 10
// Explicit type annotation (also for parameters)
let add (x: int) (y: int): int = x + y
پیوندها در F# فقط پس از تعریف شدنشان میتوانند استفاده شوند. استفاده از یک پیوند پیش از تعریف شدنش به خطای کامپایل منجر میشود.
// Compile error as the add binding has not yet been defined
// let seven = add 3 + 4
let add x y = x + y
برای تعریف دامنه از فاصلههای معنادار استفاده میشود، به این صورت که کد را نسبت به خط تعریفکنندهی پیوند با فاصله تورفتگی میدهیم. قرارداد پیشفرض این است که برای تورفتگی از چهار فاصله استفاده شود.
let toes =
let left = 5
let right = 5
left + right
let multiplyPlusTwo x y =
let product = x * y
product + 2
// Trying to access the left, right or product bindings
// here would result in a compile error
پیوندهای F# (که توابع را هم در بر میگیرند) معمولاً در ماژولها سازماندهی میشوند. یک ماژول قابلیتهای مرتبط را گروهبندی میکند و با کلیدواژهی module تعریف میشود. تعریف ماژول باید پیش از پیوندهایش بیاید:
module Calculator
let pi = 3.14
let add x y = x + y
F# از دو نوع کامنت پشتیبانی میکند. کامنتهای تکخطی با // شروع میشوند و کامنتهای چندخطی بین (* و *) قرار میگیرند.