কিছু সমস্যা রয়েছে যা সহজেই বীজগণিত ডেটা টাইপগুলির দ্বারা সমাধান করা হয়, উদাহরণস্বরূপ একটি তালিকার ধরণটি খুব সংক্ষিপ্তভাবে হিসাবে প্রকাশ করা যেতে পারে:
data ConsList a = Empty | ConsCell a (ConsList a)
consmap f Empty = Empty
consmap f (ConsCell a b) = ConsCell (f a) (consmap f b)
l = ConsCell 1 (ConsCell 2 (ConsCell 3 Empty))
consmap (+1) l
এই বিশেষ উদাহরণটি হ্যাস্কেলের মধ্যে রয়েছে, তবে এটি অন্যান্য ভাষায় একই রকম হবে বীজগণিত ডেটা টাইপের জন্য স্থানীয় সমর্থন।
দেখা যাচ্ছে যে ওও-স্টাইলের সাব টাইপিংয়ের একটি সুস্পষ্ট ম্যাপিং রয়েছে: ডেটাটাইপ একটি বিমূর্ত বেস শ্রেণিতে পরিণত হয় এবং প্রতিটি ডেটা কনস্ট্রাক্টর একটি কংক্রিট সাবক্লাসে পরিণত হয়। স্কালায় এখানে একটি উদাহরণ রয়েছে:
sealed abstract class ConsList[+T] {
def map[U](f: T => U): ConsList[U]
}
object Empty extends ConsList[Nothing] {
override def map[U](f: Nothing => U) = this
}
final class ConsCell[T](first: T, rest: ConsList[T]) extends ConsList[T] {
override def map[U](f: T => U) = new ConsCell(f(first), rest.map(f))
}
val l = (new ConsCell(1, new ConsCell(2, new ConsCell(3, Empty)))
l.map(1+)
নিখরচায় সাবক্লাসিংয়ের বাইরে কেবলমাত্র প্রয়োজনীয় জিনিসটি ক্লাসগুলি সিল করার একটি উপায় , অর্থাৎ শ্রেণিবিন্যাসে সাবক্লাস যুক্ত করা অসম্ভব করার একটি উপায়।
সি # বা জাভার মতো ভাষায় আপনি কীভাবে এই সমস্যার কাছে যাবেন? সি # তে বীজগণিত ডেটা টাইপ ব্যবহার করার চেষ্টা করার সময় আমি যে দুটি হোঁচট খেয়েছি তা হ'ল:
- সি # তে নীচের প্রকারটি কী বলা হয় তা আমি বুঝতে পারি না (যেমন আমি কী লিখব তা বুঝতে পারি না
class Empty : ConsList< ??? >
) - সিল করার কোনও উপায় আমি বের করতে পারিনি
ConsList
যাতে শ্রেণিবিন্যাসে কোনও সাবক্ল্যাস যুক্ত করা যায় না
সি # এবং / অথবা জাভাতে বীজগণিত ডেটা টাইপগুলি প্রয়োগ করার সর্বাধিক অভিজাত পদ্ধতি কী হবে? অথবা, যদি এটি সম্ভব না হয় তবে অহংকার প্রতিস্থাপনটি কী হবে?