Qualche tempo fa ho deciso di imparare Haskell per aiutare ad apprendere più idee "pure funzionali" che potrei applicare a F #. A prima vista sembra che non ci siano tipi reali in Haskell come quelli che ha F #. Sto bene così ho voluto trovare un modo per rimuovermi dal design ibrido OO / Functional che ho usato in F # e provare davvero a diventare senza classi e sviluppare veramente un design incentrato sulle funzioni. La prima cosa che mi è venuta in mente quando ho usato Haskell era di passare semplicemente le tuple in giro perché possono contenere informazioni in coppie di valori chiave molto simili ai linguaggi dinamici ma non hanno la sintassi del costruttore come i tipi F #.
Ad esempio in F #:
type DatabaseWorkValueItem(firstItem, secondItem, thirdItem) =
member public x.FirstItem = firstItem
member public x.SecondItem = secondItem
member public x.ThirdItem = thirdItem
E questo sarebbe nel mio nuovo design proposto:
module DatabaseWorkValueItem =
let firstItem (item, _, _) = item
let secondItem (_,item, _) = item
let thirdItem (_,_, item) = item
--Replace constructor with method
let CreateValueItem (parameter:String, value:Object, sqlType:SqlDbType) =
(parameter, value, sqlType)
--Replace properties with more methods
let GetDataType (item :(String *Object * SqlDbType)) =
thirdItem item
let GetParameter (item :(String *Object * SqlDbType)) =
firstItem item
let GetValue (item :(String *Object * SqlDbType)) =
secondItem item
Entrambi hanno la stessa idea. Si crea una classe come Tipo con proprietà impostate su costruzione e l'altra utilizza tutte le funzioni per creare e leggere una tupla.
La domanda è: sono pazzo a preoccuparmi di questo? Anche se mi rendo conto che F # ha la comodità di saltare tra due paradigmi, non posso fare a meno di pensare che sia una coperta constrongvole per