আমি এটিকে ব্যবহারের বিবৃতিটির অপব্যবহার বলে মনে করি। আমি সচেতন যে আমি এই পদে সংখ্যালঘুতে আছি।
আমি এটিকে তিনটি কারণে অপব্যবহার হিসাবে বিবেচনা করি।
প্রথমত, কারণ আমি প্রত্যাশা করি যে "ব্যবহার করা" একটি উত্স ব্যবহার করতে এবং এটি সম্পন্ন করার পরে তা নিষ্পত্তি করতে ব্যবহৃত হয় । প্রোগ্রামের স্থিতি পরিবর্তন করা কোনও সংস্থান ব্যবহার করছে না এবং এটিকে ফিরিয়ে দেওয়া কোনও কিছুই নিষ্পত্তি করছে না । অতএব, রাষ্ট্রকে পরিবর্তন এবং পুনরুদ্ধার করতে "ব্যবহার করা" একটি অপব্যবহার; কোডটি নৈমিত্তিক পাঠকের জন্য বিভ্রান্তিকর।
দ্বিতীয়ত, কারণ আমি আশা করি যে "ব্যবহার" শালীনতার বাইরে ব্যবহার করা হবে , প্রয়োজনের বাইরে নয় । আপনি যখন ফাইলটি সম্পন্ন করেছেন তখন তা নিষ্পত্তির জন্য আপনি "ব্যবহার" করার কারণটি তা করার প্রয়োজন হয় না, তবে এটি নম্র হয় - অন্য কেউ হয়তো এই ফাইলটি ব্যবহার করার জন্য অপেক্ষা করছেন, তাই বলে "সম্পন্ন হয়েছে" এখন "করণীয় নৈতিকভাবে সঠিক জিনিস। আমি প্রত্যাশা করি যে আমি একটি "ব্যবহার" রিফ্যাক্টর করতে সক্ষম হব যাতে ব্যবহৃত সম্পদটি দীর্ঘ সময়ের জন্য ধরে রাখা হয় এবং পরে তা নিষ্পত্তি করা যায় এবং এটি করার একমাত্র প্রভাবটি অন্যান্য প্রক্রিয়াগুলিকে সামান্য অসুবিধে করা । একটি "ব্যবহারকারী" ব্লক যা প্রোগ্রামের স্থিতিতে অর্থপূর্ণ প্রভাব ফেলে আপত্তিজনক কারণ এটি কোনও নির্মাণে প্রোগ্রামের রাষ্ট্রের একটি গুরুত্বপূর্ণ, প্রয়োজনীয় রূপান্তর লুকিয়ে রাখে যা দেখে মনে হয় এটি প্রয়োজনীয়তা নয়, সুবিধার্থে এবং ভদ্রতার জন্য রয়েছে।
এবং তৃতীয়ত, আপনার প্রোগ্রামের ক্রিয়াগুলি তার রাষ্ট্র দ্বারা নির্ধারিত হয়; রাষ্ট্রের যত্ন সহকারে কারসাজির প্রয়োজনীয়তা হ'ল আমরা কেন এই কথোপকথনটি প্রথম স্থানে করছি। আসুন আমরা কীভাবে আপনার মূল প্রোগ্রামটি বিশ্লেষণ করতে পারি তা বিবেচনা করুন।
আপনি কি আমার অফিসে কোনও কোড পর্যালোচনায় এনেছিলেন, আমি প্রথম প্রশ্নটি জিজ্ঞাসা করব "যদি কোনও ব্যতিক্রম ছুঁড়ে দেওয়া হয় তবে ফ্রোবলকে লক করা কি সত্যিই সঠিক?" আপনার প্রোগ্রাম থেকে এটা স্পষ্টতই স্পষ্ট যে এই জিনিস আক্রমণাত্মকভাবে frobble আবার লক করে যাই ঘটুক না কেন। এটা কি সঠিক? একটি ব্যতিক্রম নিক্ষেপ করা হয়েছে। প্রোগ্রামটি অজানা অবস্থায় রয়েছে। আমরা জানি না যে ফু, ফিডল বা বার ছুড়েছিল, তারা কেন ছুঁড়েছিল, বা অন্য রাজ্যে কী রূপান্তর করেছিল যা পরিষ্কার হয়নি। আপনি কি আমাকে বোঝাতে পারেন যে সেই ভয়াবহ পরিস্থিতিতে পুনরায় লক করা সর্বদা সঠিক জিনিস?
হতে পারে, সম্ভবত এটি না। আমার বক্তব্যটি হ'ল, কোডটি যেমন এটি লেখা হয়েছিল ঠিক তেমনই, কোড পর্যালোচক প্রশ্ন জিজ্ঞাসা করতে জানে । "ব্যবহার" ব্যবহার করে এমন কোড সহ, আমি প্রশ্ন জিজ্ঞাসা করতে জানি না; আমি ধরে নিয়েছি যে "ব্যবহার" ব্লকটি কোনও সংস্থান বরাদ্দ করে, কিছুটা জন্য এটি ব্যবহার করে, এবং সম্পন্ন হওয়ার পরে বিনয়ের সাথে তা নিষ্পত্তি করে না, "ব্যবহার" ব্লকের সমাপনী ব্রেসটি আমার প্রোগ্রামের স্থিতিকে একচ্ছত্র ব্যর্থতায় পরিণত করে যখন নির্বিচারে অনেকগুলি প্রোগ্রামের রাষ্ট্রের ধারাবাহিকতার শর্তগুলি লঙ্ঘন করা হয়েছে।
অর্থ ব্যবহারের জন্য "ব্যবহার" ব্লক ব্যবহার এই প্রোগ্রামটিকে খণ্ডিত করে তোলে:
}
অত্যন্ত অর্থবহ। আমি যখন একক ঘনিষ্ঠ বন্ধনীটি দেখি তখনই আমি তাৎক্ষণিকভাবে মনে করি না "এই ধনুর্বন্ধনের পার্শ্ব প্রতিক্রিয়া রয়েছে যা আমার প্রোগ্রামের বিশ্বব্যাপী অবস্থার সুদূরপ্রসারী প্রভাব ফেলেছে"। কিন্তু আপনি যখন এইরকম "ব্যবহার" করার অপব্যবহার করেন, হঠাৎ করে তা হয়ে যায়।
দ্বিতীয় জিনিসটি আমি জিজ্ঞাসা করব যদি আমি আপনার মূল কোডটি দেখেছি তবে "আনলক করার পরে ব্যতিক্রম ছুঁড়ে দেওয়া হলেও চেষ্টাটি প্রবেশ করার আগে কী ঘটে?" আপনি যদি একটি অপ্টিমাইটিজড অ্যাসেমব্লি চালাচ্ছেন তবে এই সংকলকটি চেষ্টা করার আগে কোনও অনি-নির্দেশ নির্দেশিকা সন্নিবেশ করিয়েছে এবং কোনও থ্রেড অ্যাওর্ট ব্যতিক্রমের জন্য কোনও বিকল্প নেই। এটি বিরল, তবে এটি বাস্তব জীবনে ঘটে, বিশেষত ওয়েব সার্ভারগুলিতে। সেক্ষেত্রে আনলকটি ঘটে তবে লকটি কখনই ঘটে না, কারণ ব্যতিক্রমটি চেষ্টা করার আগে ছুঁড়ে দেওয়া হয়েছিল। এটি সম্পূর্ণরূপে সম্ভব যে এই কোডটি এই সমস্যায় ঝুঁকিপূর্ণ এবং আসলে লেখা উচিত
bool needsLock = false;
try
{
// must be carefully written so that needsLock is set
// if and only if the unlock happened:
this.Frobble.AtomicUnlock(ref needsLock);
blah blah blah
}
finally
{
if (needsLock) this.Frobble.Lock();
}
আবার, সম্ভবত এটি করে, সম্ভবত এটি না, তবে আমি প্রশ্ন জিজ্ঞাসা করতে জানি । "ব্যবহার" সংস্করণ দিয়ে, এটি একই সমস্যার জন্য সংবেদনশীল: ফ্রোবলে লক হওয়ার পরে একটি থ্রেড অ্যাওর্ট ব্যতিক্রম নিক্ষেপ করা যেতে পারে তবে ব্যবহারের সাথে সম্পর্কিত চেষ্টা-সুরক্ষিত অঞ্চল প্রবেশ করার আগে। তবে "ব্যবহার" সংস্করণ দিয়ে, আমি ধরে নিই যে এটি "তাই কি?" অবস্থা. এটি ঘটলে দুর্ভাগ্যজনক, তবে আমি ধরে নিই যে "ব্যবহার" কেবল নম্র হওয়ার জন্যই রয়েছে, গুরুত্বপূর্ণ কর্মসূচির অবস্থা পরিবর্তন করতে নয়। আমি ধরে নিয়েছি যে যদি কোনও ভয়াবহ থ্রেড অবলম্বন ব্যতিক্রম ঠিক তখন ভুল সময়ে ঘটে তবে ওহ ভাল, আবর্জনা সংগ্রহকারী চূড়ান্তকরণকারীটি চালিয়ে শেষ পর্যন্ত সেই সংস্থানটি পরিষ্কার করবে।