Adil uyarı, fonksiyonel programlamada yeniyim, bu yüzden birçok kötü varsayım taşıyabilirim.
Cebirsel türleri öğreniyorum. Birçok işlevsel dilde bunlara sahip gibi görünmektedir ve desen eşleşmesi ile birlikte oldukça yararlıdırlar. Ancak, gerçekte hangi problemi çözüyorlar? C # gibi bir görünüşte (sıralama) cebirsel türü uygulayabilirsiniz:
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
{
}
Ama bence çoğu, bunun nesne yönelimli programlamanın piç haline getirilmesi olduğunu kabul ediyor ve bunu asla yapmamalısınız. İşlevsel programlama sadece bu tarz bir programlamanın daha az kaba görünmesini sağlayan daha temiz bir sözdizimi ekliyor mu? Başka ne eksik?
class ThirdOption : Option{}
ve size vermek new ThirdOption()
beklediğiniz yerde Some
ya None
?
data Maybe a = Just a | Nothing
( örneğinize eşdeğerdir data Option a = Some a | None
): post-hoc üçüncü bir vaka ekleyemezsiniz. Gösterdiğiniz şekilde C #'daki toplam türlerini öykünebilirsiniz, ancak bu en güzel değildir.