Bagikan melalui


Opsi Nilai

Jenis Opsi Nilai di F# digunakan saat dua keadaan berikut ini berlaku:

  1. Skenario sesuai untuk Opsi F#.
  2. Menggunakan struktur memberikan manfaat performa dalam skenario Anda.

Tidak semua skenario peka performa "diselesaikan" dengan menggunakan struktur. Anda harus mempertimbangkan biaya penyalinan tambahan saat menggunakannya alih-alih jenis referensi. Namun, program F# besar biasanya membuat instans banyak jenis opsional yang mengalir melalui jalur panas, dan dalam kasus seperti itu, struktur sering dapat menghasilkan performa keseluruhan yang lebih baik selama masa pakai program.

Definisi

Opsi Nilai didefinisikan sebagai penyatuan terdiskriminasi struct yang mirip dengan jenis opsi referensi. Definisinya dapat dipikirkan dengan cara ini:

[<StructuralEquality; StructuralComparison>]
[<Struct>]
type ValueOption<'T> =
    | ValueNone
    | ValueSome of 'T

Opsi Nilai sesuai dengan kesetaraan dan perbandingan struktural. Perbedaan utamanya adalah bahwa nama yang dikompilasi, nama jenis, dan nama kasus semuanya menunjukkan bahwa itu adalah jenis nilai.

Menggunakan Opsi Nilai

Opsi Nilai digunakan seperti Opsi. ValueSome digunakan untuk menunjukkan bahwa nilai ada, dan ValueNone digunakan saat nilai tidak ada:

let tryParseDateTime (s: string) =
    match System.DateTime.TryParse(s) with
    | (true, dt) -> ValueSome dt
    | (false, _) -> ValueNone

let possibleDateString1 = "1990-12-25"
let possibleDateString2 = "This is not a date"

let result1 = tryParseDateTime possibleDateString1
let result2 = tryParseDateTime possibleDateString2

match (result1, result2) with
| ValueSome d1, ValueSome d2 -> printfn "Both are dates!"
| ValueSome d1, ValueNone -> printfn "Only the first is a date!"
| ValueNone, ValueSome d2 -> printfn "Only the second is a date!"
| ValueNone, ValueNone -> printfn "None of them are dates!"

Seperti halnya Opsi, konvensi penamaan untuk fungsi yang kembali ValueOption adalah mengawalinya dengan try.

Properti dan metode Opsi Nilai

Ada satu properti untuk Opsi Nilai saat ini: Value. Dinaikkan InvalidOperationException jika tidak ada nilai saat properti ini dipanggil.

Fungsi Opsi Nilai

Modul ValueOption di FSharp.Core berisi fungsionalitas yang setara dengan Option modul. Ada beberapa perbedaan nama, seperti defaultValueArg:

val defaultValueArg : arg:'T voption -> defaultValue:'T -> 'T

Tindakan ini sama seperti defaultArg dalam Option modul, tetapi beroperasi pada Opsi Nilai sebagai gantinya.

Lihat juga