خيارات (F#)

نوع خيار في F# هو المستخدم عند القيمة فعلى قد لا exهوt للالقيمة المسماة أو متغير. خيار له الأساسية كتابة ويمكن الاحتفاظ بالقيمة من هذا النوع، أو قد لا يكون القيمة.

ملاحظات

يلي تعليمات برمجية يوضح استخدام نوع خيار.

let keepIfPositive (a : int) = if a > 0 then Some(a) else None 

قيمة Noneهو المستخدمة عندما لا يكون هناك خيار على القيمة الفعلية. وإلا، تعبير Some( ... )يوفر خيار القيمة. قيم Someو Noneمفيدة في مطابقة نقش، كما في دالة التالية exists، أي إرجاع trueإذا كان خيار القيمة و falseإذا أدى عدم.

let exists (x : int option) = 
    match x with
    | Some(x) -> true
    | None -> false

استخدام خيارات

خيارات تستخدم عموما عند إجراء بحث لا يقوم بإرجاع نتيجة مطابقة, كـ في التعليمة البرمجية التالية.

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 -> elem = 26) [ 200; 100; 50; 25 ]

في تعليمات برمجية السابقة، lهوt هو البحث بشكل متكرر. الدالة tryFindMatchتأخذ دالة دالة تقييم predالتي إرجاع القيمة منطقية، وقائمة بحث. إذا كان عنصر دالة التقييم satهوfies ذلك هو، ينتهي العودية وتقوم دالة بإرجاع القيمة كخيار في تعبير Some(head). عندما تنتهي من العودية lهوt فارغ هو متطابق. في هذه المرحلة القيمة headلم لم يتم العثور على، و Noneهو التي يتم إرجاعها.

F# مكتبة العديد من دالات أن البحث إرجاع مجموعة القيمة قد أو قد لا يكون موجوداً optionالنوع. حسب الاصطلاح، تبدأ هذه الدالات بواسطة tryبادئة، ل مثال، من Seq.tryFindIndex.

خيارات أيضا يكون مفيداً عند القيمة قد لا exهوt، على سبيل المثال إذا كان ذلك هو المحتملة التي سوف يتم طرح استثناء عند محاولة إنشاء القيمة. The following تعليمات برمجية مثال illustrates this.

open System.IO
let openFile filename =
    try
        let file = File.Open (filename, FileMode.Create)
        Some(file)
    with
        | ex -> eprintf "An exception occurred with message %s" ex.Message
                None    

openFileدالة في المثال السابق على نوع string -> File optionلأن ذلك إرجاع Fileالكائن إذا كان يتم فتح الملف بنجاح و Noneفي حالة حدوث استثناء. تبعاً للحالة، قد لا يكون الاختيار تصميم مناسب إلى جذب استثناء بدلاً من السماح به إلى النشر.

خيار خصائص و وظائف

يعتمد نوع خيار الخصائص والأساليب التالية.

الخاصية أو الطريقة

Type

الوصف

لا يوجد

'T option

خاصية ثابتة التي تمكنك من إنشاء القيمة خيار له Noneالقيمة.

IsNone

bool

إرجاع trueإذا كان خيار Noneالقيمة.

IsSome

bool

بإرجاع trueإذا كان خيار القيمة التي هو لا None.

تتطلب بعض البرامج المستندة إلى

'T option

قيمة ثابتة عضو تقوم بإنشاء أحد خيارات التي هو None.

Value

'T

إرجاع the underlying القيمة, أو throws a NullReferenceException if the القيمة هو None.

خيار وحدة نمطية?

There هو a وحدة نمطية?, خيار, that يحتوي على useful دالات that perform العمليات تشغيل خيارات. Some دالات تكرار the functionality of the خصائص but are useful في contexts الموقع a دالة هو needed. خيار.isSome و خيار.isNone are كلاهما وحدة نمطية? دالات that اختبار whether an خيار holds a القيمة. خيار.يحصل obtains the القيمة, if there هو واحد. If there غير محقق القيمة, it throws ArgumentException.

The خيار.يربط دالة executes a دالة تشغيل the القيمة, if there هو a القيمة. The دالة must take exactly واحد وسيطة, و its معلمة نوع must be the خيار نوع. The return القيمة of the دالة هو another خيار نوع.

وحدة نمطية? للخيار كما تتضمن الدالات التي تتوافق مع الدالات المتوفرة في القوائم، صفائف، تسلسل، و غير ذلك أنواع المجموعات. هذه دالات تضمين خيار.مخطط خيار.iter، خيار.forall ، خيار.موجود، خيار.foldBack ، خيار.fold و خيار.العدد . هذه الدالات بتمكين خيارات إلى يمكن استخدامها كمجموعة من عناصر صفر أو واحد. لمزيد من المعلومات و الأمثلة، راجع دالة تجميع في القوائم.

التحويل إلى أنواع غير ذلك

يمكن محول الخيارات إلى القوائم أو صفائف. عندما خيار هو تتحول إلى أي من هذه بنيات بيانات، بنية بيانات الناتجة على عنصر صفر أو واحد. لتحويل أحد خيارات إلى صفيفة، استخدم من خيار.toArray. لتحويل أحد خيارات إلى قائمة، استخدم من خيار.toList.

راجع أيضًا:

موارد أخرى

مرجع لغة ب #

أنواع ب #