Fair Warning, je suis nouveau à la programmation fonctionnelle afin que je puisse tenir de nombreuses hypothèses mauvaises.
J'ai appris sur les types algébriques. De nombreux langages fonctionnels semblent en avoir, et ils sont assez utiles en conjonction avec la correspondance de modèles. Cependant, quel problème résolvent-ils réellement? Je peux implémenter un type algébrique apparemment (en quelque sorte) en C # comme ceci:
public abstract class Option { }
public class None : Option { }
public class Some<T> : Option
{
public T Value { get; set; }
}
var result = GetSomeValue();
if(result is None)
{
}
else
{
}
Mais je pense que la plupart seraient d'accord c'est un abâtardissement de la programmation orientée objet, vous ne devriez jamais faire. La programmation fonctionnelle ajoute-t-elle simplement une syntaxe plus propre qui rend ce style de programmation moins grossier? Que manque-t-il d'autre?
class ThirdOption : Option{}
et vous donner ce new ThirdOption()
que vous attendiez Some
ou None
?
data Maybe a = Just a | Nothing
(équivalent à data Option a = Some a | None
dans votre exemple): vous ne pouvez pas ajouter un troisième cas post-hoc. Alors que vous pouvez sorte de types sum Emuler en C # de la manière que vous avez montré, ce n'est pas la plus jolie.