null ব্যবহার হ'ল অ্যাপ্লিকেশন / ভাষা নির্ভর
অবশেষে nullএকটি বৈধ অ্যাপ্লিকেশন মান হিসাবে ব্যবহার না করা বাছাই আপনার আবেদন এবং প্রোগ্রামিং ভাষা / ইন্টারফেস / প্রান্ত দ্বারা মূলত নির্ধারিত হয়।
একটি মৌলিক স্তরে, আমি মূল্যবোধের পৃথক শ্রেণি থাকলে স্বতন্ত্র প্রকারের ব্যবহার করার চেষ্টা করার পরামর্শ দেব। nullআপনার ইন্টারফেস যদি এটির অনুমতি দেয় এবং এমন একটি সম্পত্তি যেখানে আপনি প্রতিনিধিত্ব করার চেষ্টা করছেন সেখানে কেবলমাত্র দুটি শ্রেণি রয়েছে তবে এটি একটি বিকল্প হতে পারে। আপনার ইন্টারফেস বা ফর্ম্যাট এটির অনুমতি দিলে কোনও সম্পত্তি ছাড় দেওয়া একটি বিকল্প হতে পারে। একটি নতুন সমষ্টিগত ধরণ (শ্রেণি, অবজেক্ট, বার্তা প্রকার) অন্য বিকল্প হতে পারে।
আপনার স্ট্রিং উদাহরণের জন্য, যদি এটি প্রোগ্রামিং ভাষায় হয় তবে আমি নিজেকে কয়েকটা প্রশ্ন জিজ্ঞাসা করব।
- আমি কি ভবিষ্যতের ধরণের মানগুলি যুক্ত করার পরিকল্পনা করছি? যদি তা হয় তবে
Optionআপনার ইন্টারফেস ডিজাইনের জন্য সম্ভবত এটি আরও ভাল।
- কখন আমার গ্রাহকদের কলকে বৈধতা দেওয়া দরকার? স্ট্যাটিক্যালি? পরিবর্তনশীল? আগে? পরে? আদৌ? আপনার প্রোগ্রামিং ভাষা যদি এটি সমর্থন করে তবে স্ট্যাটিক টাইপিংয়ের সুবিধাগুলি ব্যবহার করুন কারণ এটি আপনাকে বৈধতার জন্য যে কোড তৈরি করতে হবে তা এড়িয়ে চলে।
Optionআপনার স্ট্রিং অ-অযোগ্য হলে সম্ভবত এই কেসটি সবচেয়ে ভাল পূরণ করে। তবে, আপনার সম্ভবত কোনও nullস্ট্রিং মানের জন্য ব্যবহারকারীর ইনপুটটি পরীক্ষা করতে হবে , সুতরাং আমি সম্ভবত প্রথম প্রশ্নটির প্রশ্নটির পিছনে পিছিয়ে পড়েছি: আমি কত ধরণের মান / উপস্থাপন করতে চাই।
- কি
nullআমার প্রোগ্রামিং ভাষায় একটি প্রোগ্রামার ত্রুটির পরিচায়ক? দুর্ভাগ্যক্রমে, nullপ্রায়শই কিছু ভাষাতে ইনিটায়ালাইজড (বা স্পষ্টরূপে নয়) সূচক বা রেফারেন্সের জন্য ডিফল্ট মান। কি nullডিফল্ট মান হিসাবে গ্রহণযোগ্য একটি মান হিসেবে? এটি একটি ডিফল্ট মান হিসাবে নিরাপদ ? কখনও কখনও nullবিচ্ছিন্ন মানগুলির ইঙ্গিত দেয়। আমি কি আমার ইন্টারফেসের গ্রাহকদের তাদের প্রোগ্রামে এই সম্ভাব্য মেমরি পরিচালনা বা প্রারম্ভিক সমস্যার একটি ইঙ্গিত দিয়েছি? এই জাতীয় সমস্যার মুখে এই জাতীয় কলটির ব্যর্থতা মোড কী? কলারটি কি আমার মতো একই প্রক্রিয়াতে বা থ্রেডে রয়েছে যাতে এই ধরনের ত্রুটিগুলি আমার আবেদনের জন্য উচ্চ ঝুঁকিপূর্ণ?
এই প্রশ্নের আপনার উত্তরগুলির উপর নির্ভর করে, আপনি সম্ভবত nullআপনার ইন্টারফেসের জন্য সঠিক কিনা তা সুনিশ্চিত করতে সক্ষম হবেন ।
উদাহরণ 1
- আপনার আবেদনটি সুরক্ষা গুরুতর critical
- আপনি স্টার্টআপে কিছু ধরণের হিপ ইনিশিয়ালাইজেশন ব্যবহার করছেন এবং
nullস্ট্রিংয়ের জন্য স্থান বরাদ্দ করতে ব্যর্থ হওয়ার পরে একটি সম্ভাব্য স্ট্রিংয়ের মান।
- এ জাতীয় সম্ভাবনা রয়েছে এরকম একটি স্ট্রিং আপনার ইন্টারফেসটিকে হিট করে
উত্তর: nullসম্ভবত উপযুক্ত নয়
nullযুক্তি : এই ক্ষেত্রে দুটি ভিন্ন ধরণের মান বোঝাতে ব্যবহৃত হয়। প্রথমটি কোনও ডিফল্ট মান হতে পারে যা আপনার ইন্টারফেসের ব্যবহারকারী সেট করতে চায়। দুর্ভাগ্যক্রমে, দ্বিতীয় মানটি এটি চিহ্নিত করার জন্য একটি পতাকা যা আপনার সিস্টেমটি সঠিকভাবে কাজ করছে না। এই ধরনের ক্ষেত্রে, আপনি সম্ভবত যথাসম্ভব নিরাপদে ব্যর্থ হতে চান (এটি আপনার সিস্টেমে যা বোঝায়)।
উদাহরণ 2
- আপনি একটি সি স্ট্রাক্ট ব্যবহার করছেন যার একটি
char *সদস্য রয়েছে।
- আপনার সিস্টেম হিপ বরাদ্দ ব্যবহার করে না এবং আপনি মিস্রা পরীক্ষা করছেন।
- আপনার ইন্টারফেসটি এই স্ট্রাকটিকে পয়েন্টার হিসাবে গ্রহণ করে এবং নিশ্চিত করে তোলে যে স্ট্রাকটি নির্দেশ করে না
NULL
char *আপনার API এর জন্য সদস্যের ডিফল্ট এবং নিরাপদ মান এর একক মান দ্বারা চিহ্নিত করা যেতে পারেNULL
- আপনার ব্যবহারকারীর কাঠামো সূচনা করার পরে, আপনি ব্যবহারকারীকে স্পষ্টভাবে
char *সদস্যকে আরম্ভ না করার সম্ভাবনা সরবরাহ করতে চান ।
উত্তর: NULLউপযুক্ত হতে পারে
যুক্তি: আপনার স্ট্রাকটি NULLচেকটি পাস করে তবে অবিবেচনাযুক্ত হওয়ার খুব কম সুযোগ রয়েছে । তবে আপনার স্ট্রাক্টের মান এবং / অথবা স্ট্রাক্টের ঠিকানাটির পরিসীমা পরীক্ষা করতে না পারলে আপনার এপিআই এটির জন্য অ্যাকাউন্ট করতে পারবেন না। MISRA-C ল্যাটারগুলি আপনার API এর ব্যবহারকারীদের তাদের আরম্ভের আগে স্ট্রাক্ট ব্যবহারের পতাকাঙ্কিত করে সহায়তা করতে পারে। যাইহোক, char *সদস্য হিসাবে , যদি সূচনা কাঠামোর দিকে নির্দেশকের বিন্দু NULLহয় তবে স্ট্রাক ইনিশিয়ালাইজারে কোনও অনির্ধারিত সদস্যের ডিফল্ট মান। অতএব, আপনার আবেদনের স্ট্রাক সদস্যের NULLজন্য নিরাপদ, ডিফল্ট মান হিসাবে পরিবেশন করতে পারে char *।
যদি এটি সিরিয়ালাইজেশন ইন্টারফেসে থাকে তবে আমি স্ট্রিংয়ের নাল ব্যবহার করব কি না সে সম্পর্কে আমি নিম্নলিখিত প্রশ্নগুলি জিজ্ঞাসা করব।
- কি
nullএকটি সম্ভাব্য ক্লায়েন্ট সাইড ত্রুটির পরিচায়ক? জাভাস্ক্রিপ্টে JSON এর জন্য, এটি সম্ভবত nullবরাদ্দ ব্যর্থতার ইঙ্গিত হিসাবে ব্যবহৃত হয় না। জাভাস্ক্রিপ্টে, এটি সমস্যা হিসাবে সেট করার জন্য কোনও রেফারেন্স থেকে অবজেক্টের অনুপস্থিতির সুস্পষ্ট ইঙ্গিত হিসাবে ব্যবহৃত হয়। যাইহোক, সেখানে জাভাস্ক্রিপ্ট অবিশ্বাস্য পার্সার এবং সিরিয়ালাইজার রয়েছে যা জেএসএনকে nullদেশীয় nullপ্রকারে মানচিত্র করে । যদি এটি হয় তবে এটি nullআপনার নির্দিষ্ট ভাষা, পার্সার এবং সিরিয়ালাইজার সংমিশ্রনের জন্য স্থানীয় ব্যবহার ঠিক আছে কিনা তা নিয়ে আলোচনা শুরু করে ।
- কোনও সম্পত্তির মূল্য স্পষ্টভাবে অনুপস্থিতি কী কোনও একক সম্পত্তির মানের চেয়ে বেশি প্রভাব ফেলবে? কখনও কখনও একটি
nullআসলে আপনার কাছে একটি নতুন বার্তা প্রকার সম্পূর্ণরূপে ইঙ্গিত করে। সিরিয়ালাইজেশন ফর্ম্যাটটি আপনার গ্রাহকদের জন্য সম্পূর্ণ ভিন্ন বার্তার ধরণ নির্দিষ্ট করতে এটি ক্লিনার হতে পারে। এটি নিশ্চিত করে যে আপনার ওয়েব ইন্টারফেস সরবরাহ করে এমন বার্তাগুলির দুটি স্বতন্ত্রতার মধ্যে তাদের বৈধতা এবং অ্যাপ্লিকেশন যুক্তির পরিষ্কার বিচ্ছিন্নতা থাকতে পারে।
সাধারণ উপদেশ
nullএটি সমর্থন করে না এমন প্রান্ত বা ইন্টারফেসের কোনও মান হতে পারে না। আপনি যদি এমন কিছু ব্যবহার করছেন যা প্রকৃতির বৈশিষ্ট্যগুলির মূল্য (যেমন জেএসএন) টাইপ করার ক্ষেত্রে অত্যন্ত আলগা হয়ে থাকে তবে আপনি যদি পারেন তবে গ্রাহক প্রান্ত সফটওয়্যারটিতে (যেমন জেএসওএন স্কিমা ) কিছু ধরণের স্কিমা বা বৈধতা দেওয়ার চেষ্টা করুন । এটি যদি কোনও প্রোগ্রামিং ল্যাঙ্গুয়েজ এপিআই থাকে তবে ব্যবহারকারীর ইনপুটটিকে স্ট্যাটিকালিটি সম্ভব হলে (টাইপিংয়ের মাধ্যমে) বৈধ করুন বা রানটাইম (যেমন ভোক্তার মুখোমুখি ইন্টারফেসগুলিতে অরফ অনুশীলন ডিফেন্সিভ প্রোগ্রামিং ) হিসাবে বোধগম্য loud গুরুত্বপূর্ণ হিসাবে, ডকুমেন্ট বা প্রান্তটি সংজ্ঞায়িত করুন যাতে কোনও প্রশ্ন নেই:
- প্রদত্ত সম্পত্তি কোন ধরণের মান (গুলি) গ্রহণ করে
- প্রদত্ত সম্পত্তির জন্য মান সীমাটি বৈধ।
- সামগ্রিক প্রকারটি কীভাবে কাঠামোযুক্ত করা উচিত। সামগ্রিক প্রকারে কোন বৈশিষ্ট্যগুলি / থাকা উচিত / থাকা উচিত?
- যদি এটি কোনও ধরণের ধারক হয় তবে কন্টেইনারটি কতগুলি আইটেম ধরে রাখতে পারে বা রাখা উচিত এবং ধারকটি কী ধরণের মান রাখে?
- কোনও ধারক বা সমষ্টিগত ধরণের সম্পত্তি বা দৃষ্টান্তগুলি কী অর্ডার, যদি কোনও হয় তবে?
- নির্দিষ্ট মান নির্ধারণের ক্ষেত্রে কোন পার্শ্ব প্রতিক্রিয়া রয়েছে এবং সেই মানগুলি পড়ার পার্শ্ব প্রতিক্রিয়াগুলি কী কী?