Basic Literal
جدول بالا کاملا واضح است و برنامه نویسان دات نت نظیر #C با انواع داده ای بالا آشنایی دارند. فقط در مورد گزینه آخر unit در فصلهای بعدی توضیح خواهم داد.
Arithmetic Operators (عملگرهای محاسباتی)
Simple String (کار با نوع داده رشته ای)
بعد از بررسی موارد بالا حالا به معرفی شناسهها میپردازم. شناسهها در #F راهی هستند برای اینکه شما به مقادیر نام اختصاص دهید. برای اختصاص نام به مقادیر کافیست از کلمه کلیدی let به همراه یک نام و علامت = و یک عبارت استفاده کنید. چیزی شبیه به تعریف متغیر در سایر زبانها نظیر #C. دلیل اینکه در #F به جای واژه متغیر از شناسه استفاده میشود این است که شما میتوانید به یک شناسه تابعی را نیز اختصاص دهید و مقدار شناسهها دیگر قابل تغییر نیست. در #F کلمه متغیر یک واژه نادرست است چون زمانی که شما یه یک متغیر مقدار اختصاص میدهید، مقدار اون متغیر دیگه قایل تغییر نیست. برای همین اکثر برنامه نویسان #F به جای استفاده از واژه متغیر از واژه مقدار یا شناسه استفاه میکنند. برای همین از واژه متغیر برای نام گذاری استفاده نمیشود. (البته در #F در بعضی مواقع ما شناسهها رو دوباره تعریف میکنیم که چیزی شبیه به استفاده از متغیر هاست ولی با اندکی تفاوت. در این فصل تمرکز ما بر روی شناسه هایی است که مقدارشان تغییر نمیکند ولی در فصل برنامه نویسی دستوری به تفصیل در این باره توضیح داده شده است)
let x = 42
let myAdd = fun x y -> x + y
let raisePowerTwo x = x ** 2.0
نام گذاری شناسه ها
برای نام گذاری شناسهها نام انتخابی یا باید با Underscore شروع شود یا با حروف. بعد از آن میتونید از اعداد هم استفاده کنید.(نظیر سایر زبانهای برنامه نویسی)
#F از unicode هم پشتیبانی میکنه یعنی میتونید متغیری به صورت زیر رو تعریف کنید.
let مسعود = ""
let ``more? `` = true
let ``class`` = "style"
محدوده تعریف شناسه ها
به دلیل اینکه در #F از {} به عنوان شروع و اتمام محدوده استفاده نمیشود دونستن و شناختن محدوده توابع بسیار مهم و ضروری است. چون اگر از شناسه ای که در یک محدوده در دسترس نباشد استفاده کنید با خطای کامپایلر متوقف خواهید شد.
همون بحث متغیرهای محلی و سراسری (در سایر زبان ها) در این جا نیز صادق است یعنی در #F شناسههای سراسری و محلی خواهیم داشت. تمام شناسه ها، چه اون هایی که در توابع استفاده میشوند و چه اونهایی که به مقادیر اشاره میکنند محدودشون از نقطه ای که تعریف میشوند تا جایی که اتمام استفاده از اونهاست تعریف شده است. برای مثال اگر یک شناسه رو در بالای فایل تعریف کنید که یک مقدار دارد تا پایان SourceFile قابل استفاده است.( به دلیل نبود مفهوم کلاس از واژه sourceFile استفاده کردم). هم چنین شناسه هایی که در توابع تعریف میشوند فقط در همون توابع قابل استفاده هستند.
حالا سوال این است که با نبودن {} چگونه محدوده خود توابع مشخص میشود؟
در #F با استفاده از فضای خای یا space محدوده شناسهها و توابع رو مشخص میکنیم. برای روشن شدن مطلب به مثال زیر دقت کنید.
let test a b = let dif = b - a let mid = dif / 2 mid + a printfn "(test 5 11) = %i" (test 5 11) printfn "(test 11 5) = %i" (test 11 5)
نکته مهم: به جای استفاده از فضای خالی(space) نمیتونید از TAB استفاده کنید.
LIGHTWEIGHT SYNTAX یا VERBOSE SYNTAX
در #F دو نوع سبک کد نویسی وجود دارد. یکی lightweight و دیگری Verbose. البته اکثر برنامه نویسان از سبک lightweight که به صورت پیش فرض در #F تعبیه شده است استفاده میکنند ولی آشنایی با سبک verbose نیز به عنوان برنامه نویس #F ضروری است. ما نیز به تبعیت از سایرین از سبک lightweight استفاده خواهیم کرد ولی یک فصل به عنوان مطالب تکمیلی اختصاص دادم که تفاوت این دو سبک را در طی چندین مثال بیان میکند.
همان طور که قبلا بیان شد #F بر اساس زبان OCaml پیاده سازی شده است. زبان OCaml مانند #F، یک زبان LIGHTWEIGHT SYNTAX نیست. LIGHTWEIGHT SYNTAX بدین معنی است محدوده شناسهها بر اساس فضای خالی بین اونها مشخص میشود نه با ;. (البته استفاده از ; به صورت اختیاری است)
بازنویسی مثال بالا
let halfWay a b = let dif = b - a in let mid = dif / 2 in mid + a
#light "off"