คำเตือนอย่างเป็นธรรมฉันยังใหม่กับการเขียนโปรแกรมที่ใช้งานได้ดังนั้นฉันอาจมีข้อสันนิษฐานที่ไม่ดีมากมาย
ฉันได้เรียนรู้เกี่ยวกับประเภทพีชคณิต ดูเหมือนว่าจะมีภาษาที่ใช้งานได้หลายภาษาและเป็นประโยชน์อย่างมากเมื่อใช้ร่วมกับการจับคู่รูปแบบ อย่างไรก็ตามพวกเขาแก้ปัญหาอะไรได้จริง? ฉันสามารถใช้ประเภทพีชคณิตที่ดูเหมือน (เรียงลำดับของ) ใน C # เช่นนี้
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
{
}
แต่ฉันคิดว่าส่วนใหญ่จะเห็นด้วยว่านี่เป็นความผิดพลาดของการเขียนโปรแกรมเชิงวัตถุและคุณไม่ควรทำเช่นนั้น ดังนั้นการเขียนโปรแกรมเชิงฟังก์ชั่นเพียงแค่เพิ่มไวยากรณ์ที่สะอาดขึ้นซึ่งทำให้รูปแบบการเขียนโปรแกรมนี้ดูแย่ลงหรือไม่? มีอะไรอีกบ้างที่ขาดหายไป?
class ThirdOption : Option{}
และให้คุณnew ThirdOption()
ที่คุณคาดว่าจะได้Some
หรือNone
?
data Maybe a = Just a | Nothing
(เทียบเท่ากับdata Option a = Some a | None
ตัวอย่างของคุณ): คุณไม่สามารถเพิ่มตัวพิมพ์เล็ก - ใหญ่ได้ แม้ว่าคุณจะสามารถเลียนแบบประเภทผลรวมใน C # ในแบบที่คุณแสดง แต่ก็ไม่ได้สวยที่สุด