F # tipe data untuk opsi inklusif
Saya seorang programmer C # yang baru saja mengetahui keindahan pemrograman F # (berkat buku Domain Modeling Made Functional ). Namun, saya terkejut bahwa saya belum menemukan contoh skenario umum: Pengguna memiliki banyak opsi yang dapat dia centang. Misalnya, memesan kamar hotel Anda mungkin ingin memiliki beberapa opsi tambahan, seperti Wifi gratis, ruang alergi, hewan peliharaan diperbolehkan, sarapan gratis, parkir gratis, dll. Bagaimana membuat model ini? Semua contoh yang saya temukan hanya memiliki dua opsi untuk dipilih: opt1 atau opt2, atau keduanya. Namun, solusi itu tidak berskala.
Saya menemukan solusi , tetapi saya juga membutuhkan solusi untuk kasus yang lebih sulit, di mana opsi mungkin memiliki parameter, seperti pada contoh reservasi kamar hotel: Jarak dari pusat kota (pengguna dapat memberikan nilai), Hadiah maksimum per malam, dll. opsi pencarian yang dapat dicentang pengguna jika diinginkan, tetapi jika ia mencentang, ia harus memberikan parameter yang diperlukan untuk setiap opsi yang dicentang.
Jawaban
Mengingat Anda ingin memiliki nilai yang terkait dengan opsi yang berbeda, apa yang akan saya lakukan dalam kasus Anda adalah menggunakan rekaman dengan beberapa bidang opsional.
type Booking =
{
freeWifi: unit option
maxPricePerNight: decimal option
}
static member Empty =
{
freeWifi = None
maxPricePerNight = None
}
Tampaknya memperpanjang rekor ini akan menyebalkan, tetapi saya rasa ini tidak akan benar-benar menjadi kasus dalam sistem kehidupan nyata mana pun. Dengan hal-hal seperti anggota Kosong yang disediakan dan pencocokan pola pada bidang rekaman individu, Anda tidak akan pernah benar-benar perlu membuat daftar semua bidang di luar definisi tipe.
Anda dapat melihat solusi yang lebih kuat untuk masalah ini dalam opsi CLI parser Argu (menggunakan DU dan kutipan untuk mencari nilai opsi berdasarkan nama kasus), tapi itu berlebihan untuk skenario yang Anda tangani.