Aracılığıyla paylaş


Seçenekler (F#)

Gerçek bir adlandırılmış değer ya da değişken yok olabilir F# seçenek türü kullanılır. İsteğe bağlı bir temel türü vardır ve bu türde bir değer tutabilir veya bir değeri olmayabilir.

Notlar

Aşağıdaki kod, seçenek türünün kullanımını göstermektedir.

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

Değeri None bir seçenek gerçek bir değer olmadığında kullanılır. Aksi takdirde, ifade Some( ... ) bir değer seçeneği sunar. Değerleri Some ve None desen, aşağıdaki işlev olarak tam olarak yararlı olan exists, hangi verir true seçenek değeri varsa ve false yoksa.

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

Seçeneklerini kullanma

Arama eşleşen bir sonuç çıkmıyor, Seçenekler aşağıdaki kodda gösterildiği gibi yaygın olarak kullanılır.

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 ]

Önceki kodda, Aranan yinelemeli olarak listelenmiştir. İşlev tryFindMatch doðrulama işlev alır pred bir Boolean değeri ve arama listesini döndürür. Yüklemi karşılayan bir öğe bulunursa, özyineleme sona erer ve işlevin değerini verir bir seçenek olarak ifade Some(head). Boş liste sağlandığında özyineleme sona erer. Bu noktada değeri head görülmemiştir, ve None döndürülür.

Bir koleksiyon return olmayabilir veya bir değer için arama birçok F# kitaplığı işlevlerini option türü. Kural gereği, bu işlevler ile başlayan try öneki, örneğin, Seq.tryFindIndex.

Bir değer, örneğin, bir değer oluşturmak çalıştığınızda bir özel durum, olası ise yok olabilir, seçenekleri de yararlı olabilir. Aşağıdaki kod örneği, bunu göstermektedir.

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 Önceki örnekteki işlevi türü olan string -> File option verdiği çünkü bir File dosyayı başarıyla açar, nesne ve None bir özel durum oluþursa. Duruma bağlı olarak bu yayılmasına izin vererek yerine bir özel durumu yakalayacak bir uygun Tasarım seçim olmayabilir.

Seçenek özellikleri ve yöntemleri

Seçenek türü aşağıdaki özellikleri ve yöntemleri destekler.

Özellik veya yöntem

Tür

Description

None

'T option

Bir seçenek değeri oluşturmanızı sağlayan bir statik özellik None değeri.

IsNone

bool

Döndürür true seçeneği varsa, None değeri.

IsSome

bool

Döndürür true seçeneği olmayan bir değer varsa, None.

Some

'T option

Bir seçenek oluşturan bir statik üyesi olmayan bir değere sahip None.

Value

'T

Ona temel olan değeri döndürür veya yaratmaz bir NullReferenceException değeri ise None.

Seçenek Modülü

Bir modül yok seçeneği, Seçenekler işlemleri gerçekleştirmek yararlı işlevler içerir. Bazı işlevler özellikleri işlevselliğini yineleme ancak bağlamlarda yararlı bir işlev nerede gereklidir. Option.isSome ve Option.isNone bir seçenek değeri tutan olup olmadığını test her iki modül işlevlerdir. Option.Get varsa, değeri alır. Herhangi bir değer ise, atar ArgumentException.

Option.bind işlev bir değer ise bu işlev değerine göre yürütür. Tam olarak bir bağımsız değişken işlevi gerçekleştirmeniz gerekir ve parametre türü seçenek türü olması gerekir. İşlevin dönüş değeri başka bir seçenek türüdür.

Seçenek modülü listeleri, diziler, sıraları ve diğer koleksiyon türleri için kullanılabilen işlevlerin karşılık işlevlerini de içerir. Bu işlevler içeren Option.map, Option.iter, Option.forall, Option.exists, Option.foldBack, Option.fold, ve Option.count. Bu işlevler bir dizi sıfır veya bir öğesi gibi kullanılacak seçenekleri sağlar. Daha fazla bilgi ve örnekler için toplama işlevlerinde tartışmasına bakın listeler.

Diğer türleri için dönüştürme

Listeleri veya diziler için seçenekler dönüştürülebilir. Bir seçenek bu veri yapıları birini dönüştürüldüğünde, sonuçta elde edilen veri yapısı sıfır veya bir öğe vardır. İsteğe bağlı bir diziye çevirmek için Option.toArray. Bir seçenek bir listesine dönüştürmek için kullanın Option.toList.

Ayrıca bkz.

Diğer Kaynaklar

F# dil başvurusu

F# türleri