نوع گزینه در F# زمانی استفاده می شود که یک مقدار واقعی ممکن است برای یک مقدار یا متغیر نامگذاری شده وجود نداشته باشد. یک گزینه دارای یک نوع اساسی است و می تواند مقداری از آن نوع را داشته باشد، یا ممکن است مقداری نداشته باشد.
ملاحظات
کد زیر تابعی را نشان می دهد که یک نوع گزینه را تولید می کند.
let keepIfPositive (a : int) = if a>0 سپس مقداری (a) دیگری هیچ
همانطور که می بینید، اگر ورودی a بزرگتر از 0 باشد، Some(a) تولید می شود. در غیر این صورت، None ایجاد می شود.
مقدار None زمانی استفاده می شود که گزینه ای دارای مقدار واقعی نباشد. در غیر این صورت، عبارت Some( . ) به گزینه مقدار می دهد. مقادیر Some و None در تطبیق الگو مفید هستند، همانطور که در تابع زیر وجود دارد، که اگر گزینه مقداری داشته باشد true و اگر نداشته باشد false را برمی گرداند.
let exists (x : int option) = match x with | Some(x) > true | None >نادرست
با استفاده از گزینه ها
همانطور که در کد زیر نشان داده شده است، معمولاً زمانی از گزینه ها استفاده می شود که جستجو نتیجه منطبقی را برنمی گرداند.
let rec tryFindMatch pred list = match list with | head :: tail > if pred(head) then Some(head) else tryFindMatch pred tail | [] > None // result1 is Some 100 and its type is int option. let result1 = tryFindMatch (fun elem > elem = 100) [ 200; 100; 50; 25 ] // result2 is None and its type is int option. let result2 = tryFindMatch (fun elem >عنصر = 26) [ 200; 100; 50; 25 ]
در کد قبلی، یک لیست به صورت بازگشتی جستجو می شود. تابع tryFindMatch یک تابع محمول pred می گیرد که یک مقدار بولی را برمی گرداند و یک لیست را برای جستجو برمی گرداند. اگر عنصری پیدا شود که گزاره را برآورده کند، بازگشت به پایان می رسد و تابع مقدار را به عنوان یک گزینه در عبارت Some(head) برمی گرداند. بازگشت زمانی به پایان می رسد که لیست خالی مطابقت داشته باشد. در آن نقطه سر مقدار پیدا نشد و None برگردانده شد.
بسیاری از توابع کتابخانه F# که مجموعه ای را برای مقداری جستجو می کنند که ممکن است وجود داشته باشد یا نباشد، نوع گزینه را برمی گرداند. طبق قرارداد، این توابع با پیشوند try شروع می شوند، به عنوان مثال، Seq. tryFindIndex.
هنگامی که مقداری ممکن است وجود نداشته باشد، گزینه ها نیز می توانند مفید باشند، برای مثال اگر ممکن است هنگام تلاش برای ساختن یک مقدار، یک استثنا ایجاد شود. مثال کد زیر این موضوع را نشان می دهد.
open System.IO let openFile filename = try let file = File.Open (filename, FileMode.Create) Some(file) with | ex >eprintf "یک استثنا با پیام %s روی داد" ex. Message None
The openFile function in the previous example has type string >گزینه File زیرا اگر فایل با موفقیت باز شود یک شی File و اگر استثنا رخ دهد هیچ یک را برمی گرداند. بسته به موقعیت، ممکن است انتخاب طراحی مناسبی نباشد که استثنایی را به جای اجازه انتشار به آن جلب کنیم.
علاوه بر این، هنوز هم می توان null یا مقداری را که null است به Some case یک گزینه ارسال کرد. به طور کلی باید از این کار اجتناب کرد، و معمولاً در برنامه نویسی روتین F# است، اما به دلیل ماهیت انواع مرجع در دات نت امکان پذیر است.
ویژگی ها و روش های گزینه
نوع گزینه از ویژگی ها و روش های زیر پشتیبانی می کند.
| مال یا روش | تایپ کنید | شرح |
| هیچ یک | گزینه T | یک عضو ثابت که یک مقدار گزینه ایجاد می کند که دارای مقدار None است. |
| هیچکدام نیست | بوول | اگر گزینه دارای مقدار هیچ باشد ، درست باز می گردد. |
| صادر شده | بوول | اگر گزینه دارای مقداری باشد که هیچ کدام نیست ، درست باز می گردد. |
| مقداری | گزینه T | یک عضو استاتیک که گزینه ای را ایجاد می کند که دارای مقداری است که هیچ کدام نیست. |
| ارزش | 'T | مقدار زیرین را برمی گرداند ، یا یک سیستم را پرتاب می کند. اگر مقدار هیچ کدام نباشد. |
ماژول گزینه
یک ماژول ، گزینه وجود دارد که شامل توابع مفیدی است که عملیات را بر روی گزینه ها انجام می دهد. برخی توابع عملکرد خصوصیات را تکرار می کنند اما در زمینه هایی که یک عملکرد مورد نیاز است مفید هستند. option. issome و option. isnone هر دو کارکرد ماژول هستند که آزمایش می کنند که آیا یک گزینه دارای یک مقدار است یا خیر. گزینه. اگر یکی وجود دارد ، مقدار را بدست می آورد. اگر هیچ ارزشی وجود نداشته باشد ، سیستم را پرتاب می کند. ArgumentException.
اگر یک مقدار وجود داشته باشد ، تابع Option. Bind یک تابع را روی مقدار اجرا می کند. عملکرد باید دقیقاً یک آرگومان را در نظر بگیرد و نوع پارامتر آن باید نوع گزینه باشد. مقدار بازگشت عملکرد نوع گزینه دیگری است.
ماژول گزینه همچنین شامل توابع است که با توابع موجود برای لیست ها ، آرایه ها ، توالی ها و سایر انواع مجموعه ها مطابقت دارد. این توابع شامل گزینه. map ، option. iter ، option. forall ، option. exists ، option. foldback ، option. fold و option. count است. این توابع امکان استفاده از گزینه ها مانند مجموعه ای از صفر یا یک عنصر را فراهم می کند. برای اطلاعات بیشتر و مثال ، به بحث در مورد عملکردهای مجموعه در لیست ها مراجعه کنید.
تبدیل به انواع دیگر
گزینه ها می توانند به لیست ها یا آرایه ها تبدیل شوند. هنگامی که یک گزینه به هر یک از این ساختارهای داده تبدیل می شود ، ساختار داده حاصل صفر یا یک عنصر دارد. برای تبدیل یک گزینه به یک آرایه ، از Option. toArray استفاده کنید. برای تبدیل یک گزینه به یک لیست ، از Option. Tolist استفاده کنید.
همچنین ببینید
فارکس وکسب درامد...
ما را در سایت فارکس وکسب درامد دنبال می کنید
برچسب :
نویسنده : احمد قانع پور
بازدید : 33
تاريخ : چهارشنبه
18 مرداد
1402 ساعت: 12:42