আমার মতে NULL ফিরিয়ে দেওয়া, কিছু খালি ফলাফল (উদাহরণস্বরূপ খালি স্ট্রিং বা একটি খালি তালিকা) ফেরানো এবং একটি ব্যতিক্রম ছুঁড়ে ফেলার মধ্যে পার্থক্য রয়েছে।
আমি সাধারণত নিম্নলিখিত পদ্ধতিটি গ্রহণ করি। আমি কোনও ফাংশন বা পদ্ধতি f (v1, ..., vn) কলটিকে কোনও ফাংশনের প্রয়োগ হিসাবে বিবেচনা করি
f : S x T1 x ... x Tn -> T
যেখানে এটি বিশ্বের "বিশ্বের রাষ্ট্র" টি 1, ..., টিএন হ'ল ইনপুট পরামিতিগুলির প্রকার, এবং টি হল প্রত্যাবর্তনের ধরণ।
আমি প্রথমে এই ফাংশনটি সংজ্ঞায়িত করার চেষ্টা করি। যদি ফাংশনটি আংশিক হয় (যেমন কিছু সংখ্যার ইনপুট মান রয়েছে যার জন্য এটি সংজ্ঞায়িত করা হয়নি) আমি এটি সিগন্যাল করতে NULL ফিরিয়ে দেব। এটি কারণ আমি গণনাটি স্বাভাবিকভাবে শেষ হতে চাই এবং আমাকে বলি যে আমি অনুরোধ করা ফাংশনটি প্রদত্ত ইনপুটগুলিতে সংজ্ঞায়িত করা হয়নি। উদাহরণস্বরূপ, রিটার্ন মান হিসাবে একটি খালি স্ট্রিং অস্পষ্ট কারণ এটি হতে পারে যে ফাংশনটি ইনপুটগুলিতে সংজ্ঞায়িত করা হয় এবং খালি স্ট্রিংটি সঠিক ফলাফল।
আমি মনে করি কলিং কোডে একটি NUL পয়েন্টার জন্য অতিরিক্ত চেক প্রয়োজনীয় কারণ আপনি একটি আংশিক ফাংশন প্রয়োগ করছেন এবং প্রদত্ত ইনপুটটির জন্য সংজ্ঞায়িত না থাকলে ফাংশনটি কিনা তা আপনাকে বলা পদ্ধতির কাজ।
আমি ত্রুটিগুলির জন্য ব্যতিক্রমগুলি ব্যবহার করতে পছন্দ করি যা গণনা পরিচালনা করতে দেয় না (যেমন কোনও উত্তর পাওয়া সম্ভব ছিল না)।
উদাহরণস্বরূপ, ধরুন আমার একটি ক্লাস গ্রাহক আছে এবং আমি একটি পদ্ধতি প্রয়োগ করতে চাই
Customer findCustomer(String customerCode)
অ্যাপ্লিকেশন ডাটাবেসে কোনও গ্রাহককে তার কোড দিয়ে সন্ধান করতে। এই পদ্ধতিতে, আমি চাই
- কোয়েরিটি সফল হলে শ্রেণি গ্রাহকের কোনও বস্তু ফেরত দিন,
- যদি কোয়েরিতে কোনও গ্রাহক না পাওয়া যায় তবে নাল ফেরান।
- ডাটাবেসের সাথে সংযোগ স্থাপন করা সম্ভব না হলে একটি ব্যতিক্রম নিক্ষেপ করুন।
নাল জন্য অতিরিক্ত চেক, উদাহরণস্বরূপ
Customer customer = findCustomer("...");
if (customer != null && customer.getOrders() > 0)
{
...
}
আমি যা করছি সেগুলির শব্দার্থতন্ত্রের অংশ এবং কোডটি আরও ভালভাবে পড়ার জন্য আমি কেবল "এগুলি এড়িয়ে চলি" না। আমি মনে করি না যে কোডটি সহজ করার জন্য হাতে সমস্যাটির শব্দার্থক শব্দগুলি সহজ করে দেওয়া একটি ভাল অনুশীলন।
অবশ্যই, যেহেতু নুলের জন্য চেকটি প্রায়শই ঘটে থাকে ভাষাটি যদি এর জন্য কিছু বিশেষ বাক্য গঠন সমর্থন করে তবে এটি ভাল।
আমি নাল অবজেক্ট প্যাটার্নটি (ল্যাফের পরামর্শ অনুসারে) ব্যবহার করার বিষয়টিও বিবেচনা করব যতক্ষণ না আমি অন্য শ্রেণীর সমস্ত বস্তুর থেকে কোনও শ্রেণির নাল বস্তুকে পৃথক করতে পারি।