Quote:
Originariamente inviato da Bellaz89
No .. o almeno, in Haskell puoi definire i concetti che ti pare nel programma. Quindi se ti serve null te lo crei (solitamente e' usato il tipo Maybe.. ma ovviamente e' opzionale)
|
Direi che se si usa un linguaggio funzionale (o se si dovesse ridisegnare un nuovo linguaggio di qualsiasi tipo) e uno pensa di re-introdurre
null sta facendo qualcosa di sbagliato.
In F# "puro" non esiste
null tutte le API sono riscritte per usare un concetto analogo a Maybe purtroppo
null può riapparire come "poison" se si chiamano librerie scritte in C#.
Microsoft sta cercando per la versione 8.0 di C# di introdurre il concetto che gli oggetti sono sempre non
null un po' l'inverso del nullable che fecero per i tipi primitivi in versioni precedenti... credo sia davvero difficile retrofittare un linguaggio pensato per avere
null ovunque a non averli più.
Il
null è un errore da un 1'000'000 di €
Fibonacci in F#:
Codice:
// Recursive function that implements the looping
// (it takes previous two elements, a and b)
let rec fibsRec a b =
if a + b < 400 then
// The current element
let current = a + b
// Calculate all remaining elements recursively
// using 'b' as 'a' and 'current' as 'b' (in the next iteration)
let rest = fibsRec b current
// Return the remaining elements with 'current' appended to the
// front of the resulting list (this constructs new list,
// so there is no mutation here!)
current :: rest
else
[] // generated all elements - return empty list once we're done
// generate list with 1, 2 and all other larger fibonaccis
let fibs = 1::2::(fibsRec 1 2)