Cảnh báo công bằng, tôi chưa quen với lập trình chức năng nên tôi có thể có nhiều giả định xấu.
Tôi đã học về các loại đại số. Nhiều ngôn ngữ chức năng dường như có chúng, và chúng khá hữu ích khi kết hợp với khớp mẫu. Tuy nhiên, vấn đề gì họ thực sự giải quyết? Tôi có thể triển khai một loại đại số dường như (sắp xếp) trong C # như thế này:
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
{
}
Nhưng tôi nghĩ hầu hết sẽ đồng ý rằng đây là một sự khốn của lập trình hướng đối tượng và bạn không bao giờ nên làm điều đó. Vì vậy, lập trình chức năng chỉ cần thêm một cú pháp sạch hơn làm cho phong cách lập trình này có vẻ ít thô? Tôi còn thiếu gì nữa?
class ThirdOption : Option{}
và cung cấp cho bạn một new ThirdOption()
nơi bạn mong đợi Some
hoặc None
?
data Maybe a = Just a | Nothing
(tương đương với data Option a = Some a | None
trong ví dụ của bạn): bạn không thể thêm trường hợp thứ ba sau hoc. Mặc dù bạn có thể sắp xếp các loại tổng mô phỏng trong C # theo cách bạn đã hiển thị, nhưng nó không phải là loại đẹp nhất.