NULL এর কেন্দ্রীয় সমস্যাটি হ'ল এটি সিস্টেমকে অবিশ্বাস্য করে তোলে। ১৯৮০ সালে টনি হোয়ার তার ট্যুরিং অ্যাওয়ার্ডকে উত্সর্গীকৃত কাগজে লিখেছিলেন:
এবং তাই, এডিএর প্রবর্তক এবং ডিজাইনারদের কাছে আমার সেরা পরামর্শ উপেক্ষা করা হয়েছে। ...। নির্ভরযোগ্যতা যেমন গুরুত্বপূর্ণ, যেমন পারমাণবিক শক্তি কেন্দ্র, ক্রুজ ক্ষেপণাস্ত্র, প্রারম্ভিক সতর্কতা ব্যবস্থা, অ্যান্টিবলিস্টিক ক্ষেপণাস্ত্র প্রতিরক্ষা ব্যবস্থা যেখানে এই ভাষাটিকে তার বর্তমান অবস্থায় এই ভাষার ব্যবহার করার অনুমতি দিবেন না। প্রোগ্রামিং ভাষার ত্রুটির ফলস্বরূপ পরের রকেটটি ভেনাসের নিরীহ ভ্রমণের জন্য অনুসন্ধানকারী স্পেস রকেট নাও হতে পারে: এটি আমাদের নিজের একটি শহরের উপর বিস্ফোরিত হতে পারে পারমাণবিক শিরশির। অবিশ্বাস্য প্রোগ্রামিং উত্সাহিত একটি অবিশ্বস্ত প্রোগ্রামিং ভাষা আমাদের পরিবেশ এবং আমাদের সমাজের জন্য পারমাণবিক শক্তি কেন্দ্রগুলিতে অনিরাপদ গাড়ি, বিষাক্ত কীটনাশক বা দুর্ঘটনার চেয়ে অনেক বেশি ঝুঁকিপূর্ণ। ঝুঁকি হ্রাস করতে সচেতন থাকুন, এটি বাড়ানোর জন্য নয়।
এর পরে এডিএ ভাষা অনেক বদলেছে, তবে জাভা, সি # এবং আরও অনেক জনপ্রিয় ভাষায় এ জাতীয় সমস্যা এখনও বিদ্যমান।
ক্লায়েন্ট এবং সরবরাহকারীদের মধ্যে চুক্তি তৈরি করা বিকাশকারীর কর্তব্য। উদাহরণস্বরূপ, সি # তে, জাভা হিসাবে, আপনি পঠনযোগ্য (দুটি বিকল্প) তৈরি করে রেফারেন্সের Generics
প্রভাব হ্রাস করতে ব্যবহার করতে পারেন :Null
NullableClass<T>
class NullableClass<T>
{
public HasValue {get;}
public T Value {get;}
}
এবং তারপরে এটি ব্যবহার করুন
NullableClass<Customer> customer = dbRepository.GetCustomer('Mr. Smith');
if(customer.HasValue){
// one logic with customer.Value
}else{
// another logic
}
অথবা সি # এক্সটেনশন পদ্ধতিগুলির সাথে দুটি বিকল্প শৈলী ব্যবহার করুন:
customer.Do(
// code with normal behaviour
,
// what to do in case of null
)
পার্থক্যটি তাৎপর্যপূর্ণ। কোনও পদ্ধতির ক্লায়েন্ট হিসাবে আপনি কী জানেন তা জানেন। একটি দলের নিয়ম থাকতে পারে:
যদি কোনও শ্রেণি NullableClass টাইপ না করে থাকে তবে এর উদাহরণটি অবশ্যই নাল নয় ।
দলটি সংকলনের সময় ডিজাইন দ্বারা চুক্তি এবং স্থিতিশীল চেকিং ব্যবহার করে এই ধারণাটিকে শক্তিশালী করতে পারে , যেমন পূর্বশর্ত সহ:
function SaveCustomer([NotNullAttribute]Customer customer){
// there is no need to check whether customer is null
// it is a client problem, not this supplier
}
বা একটি স্ট্রিং জন্য
function GetCustomer([NotNullAndNotEmptyAttribute]String customerName){
// there is no need to check whether customerName is null or empty
// it is a client problem, not this supplier
}
এই পদ্ধতির ফলে অ্যাপ্লিকেশন নির্ভরযোগ্যতা এবং সফ্টওয়্যার গুণমান অত্যন্ত বৃদ্ধি করতে পারে । কন্ট্রাক্ট বাই কনট্রাক্ট হোয়ের যুক্তির একটি বিষয় , যা বার্ট্র্যান্ড মায়ার ১৯৮৮ সালে তাঁর বিখ্যাত অবজেক্ট-ওরিয়েন্টেড সফটওয়্যার কনস্ট্রাকশন বই এবং আইফেল ভাষায় জনপ্রিয় করেছিলেন, তবে এটি আধুনিক সফ্টওয়্যার ক্র্যাফটিংয়ে অবৈধভাবে ব্যবহৃত হয় না।