.NET- এ দুটি ধরণের ধরণ রয়েছে: তথ্যসূত্র এবং মান (int, ডাবল, স্ট্রাক্ট, এনাম ইত্যাদি)। তাদের পার্থক্যের মধ্যে একটি বিষয় উল্লেখ করা যেতে পারে যে null
কোনও মান হতে পারে না। সুতরাং যদি আপনার কোনও মান প্রকার থাকে এবং "alচ্ছিক" বা "অজানা" শব্দার্থক বোঝাতে চান, আপনি এটি দিয়ে সজ্জিত করতে পারেন Nullable<>
। নোট যা Nullable<>
কেবলমাত্র মান ধরণের (এটির একটি where T : struct
ধারা রয়েছে) গ্রহণ করতে টাইপ দ্বারা সীমাবদ্ধ । Nullable<>
সংকলক থেকে এছাড়াও বিশেষ null
মূল্য আছে যার দ্বারা কোনও মান সুরক্ষিত থাকে NullReferenceExceptions
:
string x = null;
x.ToString(); // throws a NullReferenceException
int? y = null;
y.ToString(); // returns ""
ক্রিয়ামূলক ভাষা (যেমন Scala, এফ #, Haskell,, সুইফট ইত্যাদি) জন্য আপনার অধিকার সাধারণ null
থেকে কোন অস্তিত্ব নেই । এটি কারণ সমগ্র মানুষ অস্তিত্বকে null
একটি খারাপ ধারণা হিসাবে বিবেচনা করে এবং ভাষা ডিজাইনাররা এটিকে এড়িয়ে এই সমস্যাটি সমাধান করার সিদ্ধান্ত নিয়েছেন।
এর অর্থ হ'ল আবার এই ভাষাগুলিতে অমূল্য উপস্থাপনের জন্য আমাদের কিছু উপায় প্রয়োজন । Option
প্রকারটি লিখুন (নামকরণ পরিবর্তিত হয়, এটি Maybe
হাস্কেল নামে পরিচিত )। এটি একইরকম কাজ করে Nullable
যে ক্ষেত্রে এটি "ধরণ" বা "অজানা" ইত্যাদি ক্ষেত্রে কেস যুক্ত করতে একটি প্রকারকে আবৃত করে
বাস্তব পার্থক্য হ'ল বাস্তবায়িত ভাষাগুলি দ্বারা আপনাকে দেওয়া অতিরিক্ত ফাংশনগুলিতে Option
। উদাহরণ হিসাবে, নিন Option.map
(সিউডোকোডে):
function Option<T2> Option.map(opt: Option<T1>, mapFunc: T1 -> T2) {
if (opt is None) return None
else return Option<T2>(mapFunc(opt.Value))
}
শৃঙ্খলাবদ্ধ ফাংশনগুলি Option.map
শৃঙ্খলাবদ্ধতা সি # এর যে কোনও জায়গায় আপনি দেখতে পাবেন এমন সাধারণ নাল চেক বয়লারপ্লেট এড়ানোর একটি শক্তিশালী উপায়:
if (service == null)
return null;
var x = service.GetValue();
if (x == null || x.Property == null)
return null;
return x.Property.Value;
সি # তে নূন্য সমতুল্য হ'ল:
public static Nullable<T2> Map<T1, T2>(this Nullable<T1> nullable, Func<T1, T2> f)
where T1 : struct
where T2 : struct
{
if (!nullable.HasValue) return (T2?)null;
else return (T2?) f(nullable.Value);
}
তবে এটি সি # তে সীমিত উপযোগিতা রয়েছে কারণ এটি কেবল মান ধরণের জন্যই কাজ করবে।
সি # এর নতুন সংস্করণটি "নাল প্রচার" অপারেটর ( ?.
) সরবরাহ করে যা Option.map
কেবল পদ্ধতি এবং সম্পত্তি অ্যাক্সেসরের ক্ষেত্রে প্রযোজ্য ব্যতীত ফাংশনের অনুরূপ । উপরের নমুনা আবার লেখা হবে
return service?.GetValue()?.Property?.Value;