في 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# نوعين من التعليقات. يسبق التعليقات أحادية السطر الرمز //، وتُدرج التعليقات متعددة الأسطر بين (* و *).