সংক্ষিপ্তসার :
সি এর কোনও ক্রিয়াকলাপটি সর্বদা এটি নিশ্চিত করে যে এটি কোনও NULL
পয়েন্টারকে অবজ্ঞা করছে না ? না হলে কখন এই চেকগুলি এড়িয়ে যাওয়া উপযুক্ত?
বিশদ :
আমি প্রোগ্রামিং সাক্ষাত্কার সম্পর্কে কয়েকটি বই পড়ছি এবং আমি ভাবছি সি এর ফাংশন আর্গুমেন্টগুলির জন্য ইনপুট বৈধতার উপযুক্ত ডিগ্রিটি কী? স্পষ্টতই কোনও ফাংশন যা ব্যবহারকারীর কাছ থেকে ইনপুট নেয় তাকে বৈধতা NULL
দেওয়ার আগে পয়েন্টারের জন্য পরীক্ষা করা সহ বৈধতা অর্জন করতে হবে । তবে একই ফাইলের মধ্যে এমন কোনও ফাংশনের ক্ষেত্রে কী হবে যা আপনি আপনার API এর মাধ্যমে প্রকাশের প্রত্যাশা করবেন না?
উদাহরণস্বরূপ গিটের উত্স কোডে নিম্নলিখিতটি প্রদর্শিত হবে:
static unsigned short graph_get_current_column_color(const struct git_graph *graph)
{
if (!want_color(graph->revs->diffopt.use_color))
return column_colors_max;
return graph->default_column_color;
}
যদি *graph
তা হয় NULL
তবে একটি নাল পয়েন্টারটিকে বিবেচনা করা হবে, সম্ভবত প্রোগ্রামটি ক্রাশ করছে, তবে সম্ভবত কিছু অন্যান্য অনিচ্ছাকৃত আচরণের ফলস্বরূপ। অন্যদিকে ফাংশনটি রয়েছে static
এবং তাই প্রোগ্রামার ইতিমধ্যে ইনপুটটিকে বৈধ করেছে। আমি জানি না, আমি কেবল এলোমেলোভাবে এটি নির্বাচন করেছি কারণ এটি সিটিতে লেখা একটি অ্যাপ্লিকেশন প্রোগ্রামের একটি সংক্ষিপ্ত উদাহরণ ছিল I've আমি অন্যান্য অনেকগুলি জায়গা দেখেছি যেখানে NULL পরীক্ষা না করে পয়েন্টার ব্যবহার করা হয়। আমার প্রশ্নটি এই কোড বিভাগে নির্দিষ্ট নয়।
ব্যতিক্রম হস্তান্তর প্রসঙ্গে জিজ্ঞাসা করা একইরকম প্রশ্ন আমি দেখেছি । যাইহোক, সি বা সি ++ এর মতো কোনও অনিরাপদ ভাষার জন্য নিরবচ্ছিন্ন ব্যতিক্রমগুলির কোনও স্বয়ংক্রিয় ত্রুটি প্রচার নেই।
অন্যদিকে আমি ওপেন সোর্স প্রকল্পগুলিতে প্রচুর কোড দেখেছি (যেমন উপরের উদাহরণ হিসাবে) যা ব্যবহার করার আগে পয়েন্টারগুলির কোনও চেক করে না। আমি ভাবছি যে কারও কাছে কোনও ফাংশনে কখন পরীক্ষা করা উচিত বনামের জন্য নির্দেশিকা সম্পর্কে চিন্তাভাবনা আছে যদি ধরে নিই যে ফাংশনটি সঠিক যুক্তি দিয়ে ডাকা হয়েছে।
আমি উত্পাদন কোড লেখার জন্য সাধারণভাবে এই প্রশ্নে আগ্রহী। তবে আমি প্রোগ্রামিং সাক্ষাত্কারের প্রসঙ্গেও আগ্রহী। উদাহরণস্বরূপ অনেকগুলি অ্যালগরিদম পাঠ্যপুস্তক (যেমন সিএলআর) সিউডোকোডে কোনও ত্রুটি পরীক্ষা না করেই অ্যালগরিদমগুলি উপস্থাপন করে। যাইহোক, যদিও এটি অ্যালগরিদমের মূল বোঝার জন্য ভাল এটি অবশ্যই কোনও ভাল প্রোগ্রামিং অনুশীলন নয়। সুতরাং আমি কোনও সাক্ষাত্কারকারীর কাছে বলতে চাই না যে আমি আমার কোড উদাহরণগুলি সহজ করার জন্য (পাঠ্যপুস্তক হিসাবে সম্ভবত) ত্রুটি পরীক্ষা করে এড়িয়ে যাচ্ছিলাম। তবে আমি অতিরিক্ত ত্রুটি পরীক্ষা করে অক্ষম কোড তৈরি করতে উপস্থিত হতে চাই না। উদাহরণস্বরূপ নালটি graph_get_current_column_color
যাচাই করার *graph
জন্য এটি সংশোধন করা যেতে পারে তবে শূন্য হলে এটি কী করবে তা স্পষ্ট নয় *graph
, অন্যটি এটির অবজ্ঞা না করা উচিত।