سلام درود خدمت همراهان همیشگی سایت پی وی لرن . با آموزش زبان برنامه نویسی #F همراهتون هستیم. بعد از بیان رشته ها و حلقه در جلسات پیشین به بررسی options در #F و استفاده از option ها در #F خواهیم پرداخت .با ما همراه باشید.
option types در #F در محاسبات استفاده می شود زمانی که یک مقدار برای یک متغیر یا تابع ممکن است وجود داشته باشد یا ممکن است وجود نداشته باشد. option types برای نشان دادن مقادیر اختیاری در محاسبات استفاده می شود. آن ها می توانند دو مقدار ممکن داشته باشند – برخی (x) یا None.
به عنوان مثال، یک تابع انجام یک تقسیم یک مقدار را در حالت عادی بر می گرداند، اما اگر صفر در مخرج باشد استثنا وجود دارد. استفاده از option types در این جا کمک می کند تا نشان دهد که آیا عملکرد موفق بوده یا ناموفق بوده است.
یک آپشن underlying type را دارد و می تواند یک مقدار از آن نوع را داشته باشد یا ممکن است مقدار نداشته باشد.
اجازه بدهید نمونه ای از تابع تقسیم را بیاموزیم. برنامه زیر این را توضیح می دهد.
اجازه دهید یک تابع div را بنویسیم و دو استدلال را برای آن ارسال کنیم ۲۰ و ۵ –
1 2 3 | let div x y = x / y let res = div 20 5 printfn "Result: %d" res |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند .
1 | Result: 4 |
اگر آرگومان دوم صفر باشد، این برنامه یک استثنا را می گیرد .
1 2 3 | let div x y = x / y let res = div 20 0 printfn "Result: %d" res |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند .
1 2 | Unhandled Exception: System.DivideByZeroException: Division by zero |
در چنین مواردی، ما می توانیم از option types برای بازگرداندن (Some (value هنگامی که عملیات موفقیت آمیز باشد یا None اگر عملیات نتواند انجام شود، استفاده کنیم.
مثال زیر استفاده از option types ها را نشان می دهد.
مثال
1 2 3 4 5 6 7 | let div x y = match y with | 0 -> None | _ -> Some(x/y) let res : int option = div 20 4 printfn "Result: %A " res |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند .
1 | Result: Some 5 |
option types از ویژگی ها و روش های زیر پشتیبانی می کند.
ویژگی یا متدها | نوع | توضیحات |
---|---|---|
None | ‘T option | یک ویژگی استاتیک که شما را قادر به ایجاد یک option value می کند که مقدار None دارد. |
IsNone | bool | اگر option دارای مقدار None باشد، true را بر می گرداند. |
IsSome | bool | اگر option دارای یک مقدار None نیست، true می شود. |
Some | ‘T option | یک عضو استاتیک که یک option را ایجاد می کند که دارای یک مقدار None نیست. |
Value | ‘T | مقدار underlying را برمی گرداند، یا NullReferenceException را اگر مقدار None است، پرتاب می کند |
1 2 3 4 5 6 7 8 | let checkPositive (a : int) = if a > 0 then Some(a) else None let res : int option = checkPositive(-31) printfn "Result: %A " res |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند .
1 | Result: <null> |
1 2 3 4 5 6 7 8 | let div x y = match y with | 0 -> None | _ -> Some(x/y) let res : int option = div 20 4 printfn "Result: %A " res printfn "Result: %A " res.Value |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند .
1 2 | Result: Some 5 Result: 5 |
1 2 3 4 5 6 7 | let isHundred = function | Some(100) -> true | Some(_) | None -> false printfn "%A" (isHundred (Some(45))) printfn "%A" (isHundred (Some(100))) printfn "%A" (isHundred None) |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 2 3 | false true false |
به بررسی options در #F و استفاده از option ها در #F همراه مثال هایی پرداختیم . در جلسات بعد موضوعات بیش تری رو مورد بحث قرار خواهیم داد.
با ما همراه باشید.