সম্পাদনা: আমি অন্যদের সাথে সম্মতি জানাই যারা বলছেন যে, সি # 6.0 হিসাবে, ব্যতিক্রম ফিল্টারগুলি এখন যাওয়ার জন্য একটি দুর্দান্ত উপায়:catch (Exception ex) when (ex is ... || ex is ... )
বাদে আমি এখনও এক-দীর্ঘ-লাইনের লেআউটটিকে ঘৃণা করি এবং নীচের মত ব্যক্তিগতভাবে কোডটি আউট করব। আমার ধারণা এটি নান্দনিকতার মতোই কার্যকরী, কারণ আমি বিশ্বাস করি এটি বোধগম্যতার উন্নতি করে। কেউ কেউ একমত হতে পারে:
catch (Exception ex) when (
ex is ...
|| ex is ...
|| ex is ...
)
মূল:
আমি জানি আমি এখানে পার্টিতে কিছুটা দেরি করেছি, তবে পবিত্র ধোঁয়া ...
সরাসরি তাড়া করার জন্য কাটা, এই ধরণের একটি পূর্ববর্তী উত্তরটির সদৃশ হয়, তবে আপনি যদি সত্যিই বেশ কয়েকটি ব্যতিক্রম ধরণের জন্য একটি সাধারণ ক্রিয়া সম্পাদন করতে চান এবং পুরো জিনিসটিকে একটি পদ্ধতির আওতায় পরিষ্কার এবং পরিচ্ছন্ন রাখতে চান তবে কেন কেবল ল্যাম্বডা ব্যবহার করবেন না? / ক্লোজার / ইনলাইন ফাংশন নীচের মত কিছু করতে? মানে, সম্ভাবনাগুলি বেশ ভাল যে আপনি বুঝতে পেরে শেষ হয়ে গেল যে আপনি কেবল এই বন্ধকে একটি পৃথক পদ্ধতি করতে চান যা আপনি পুরো জায়গা জুড়ে ব্যবহার করতে পারেন। তবে তখন কাঠামোগতভাবে বাকী কোডটি পরিবর্তন না করেই এটি করা খুব সহজ হবে। রাইট?
private void TestMethod ()
{
Action<Exception> errorHandler = ( ex ) => {
// write to a log, whatever...
};
try
{
// try some stuff
}
catch ( FormatException ex ) { errorHandler ( ex ); }
catch ( OverflowException ex ) { errorHandler ( ex ); }
catch ( ArgumentNullException ex ) { errorHandler ( ex ); }
}
আমি আশ্চর্যর সাহায্য করতে পারি না ( সতর্কতা: সামান্য বিড়ম্বনা / কটাক্ষ) সামনে কেন পৃথিবীতে মূলত নিম্নলিখিতগুলি প্রতিস্থাপনের জন্য এই সমস্ত প্রচেষ্টাতে যায়:
try
{
// try some stuff
}
catch( FormatException ex ){}
catch( OverflowException ex ){}
catch( ArgumentNullException ex ){}
... এই পরবর্তী কোডটির গন্ধের কিছু পাগল প্রকরণের সাথে, আমি উদাহরণস্বরূপ বোঝাতে চাইছি যে আপনি কয়েকটি কীস্ট্রোক সংরক্ষণ করছেন তা কেবল।
// sorta sucks, let's be honest...
try
{
// try some stuff
}
catch( Exception ex )
{
if (ex is FormatException ||
ex is OverflowException ||
ex is ArgumentNullException)
{
// write to a log, whatever...
return;
}
throw;
}
কারণ এটি অবশ্যই স্বয়ংক্রিয়ভাবে আরও পঠনযোগ্য নয়।
মঞ্জুর, আমি /* write to a log, whatever... */ return;
প্রথম উদাহরণের বাইরে তিনটি অভিন্ন উদাহরণ রেখেছি ।
তবে আমার মতামত সাজানোর। আপনি সমস্ত ফাংশন / পদ্ধতি শুনেছেন, তাই না? সিরিয়াসলি। একটি সাধারণ ErrorHandler
ফাংশন লিখুন এবং প্রতিটি ক্যাচ ব্লক থেকে এটি কল করুন।
আপনি যদি আমাকে জিজ্ঞাসা করেন, তবে দ্বিতীয় উদাহরণটি ( if
এবং is
কীওয়ার্ড সহ) উভয়ই উল্লেখযোগ্যভাবে কম পঠনযোগ্য এবং একই সাথে আপনার প্রকল্পের রক্ষণাবেক্ষণের পর্যায়ে আরও ত্রুটি-ঝুঁকির প্রবণতা রয়েছে।
রক্ষণাবেক্ষণের পর্যায়ে, যে কেউ প্রোগ্রামিংয়ে তুলনামূলকভাবে নতুন হতে পারেন, আপনার প্রকল্পের সামগ্রিক জীবনকালের 98.7% বা তারও বেশি অংশ নিয়ে চলেছেন, এবং রক্ষণাবেক্ষণ করছেন দরিদ্র শিখক অবশ্যই আপনার ব্যতীত অন্য কেউ হতে চলেছেন। এবং খুব ভাল সুযোগ আছে তারা আপনার নামের 50% সময়টি আপনার নামের উপর চাপিয়ে দেবে।
এবং অবশ্যই FxCop তোমার দিকে এবং যাতে আপনি আছে ছাল এছাড়াও আপনার কোড একটি গুণ যা অবিকল চলমান প্রোগ্রামের সাথে করতে zip হয়েছে যোগ করুন, এবং FxCop বলতে একটি বিষয় উপেক্ষা করার এটি সম্পূর্ণই যে মামলা 99.9% একমাত্র নেই পতাকাঙ্কে সঠিক। এবং, দুঃখিত, আমার ভুল হতে পারে, তবে "অ্যাপ্লিকেশন" বৈশিষ্ট্যটি কি আপনার অ্যাপ্লিকেশনটিতে আসলে সংকলন করে না?
পুরো if
পরীক্ষাটি কি এক লাইনে রাখলে এটি আরও পাঠযোগ্য হবে? আমি তাই মনে করি না. আমি বলতে চাইছি, আমার আরও একজন প্রোগ্রামার একবারের আগে দৃhe়তার সাথে তর্ক করেছিল যে আরও একটি কোড একটি লাইনে রাখলে এটি "দ্রুত চালানো" হয়ে যায়। তবে অবশ্যই সে ছিল পুরোপুরি বাদাম। তাকে ব্যাখ্যা করার চেষ্টা করা (একটি সরল মুখের সাথে - যা চ্যালেঞ্জিং ছিল) কীভাবে দোভাষী বা সংকলক সেই দীর্ঘ রেখাটি পৃথকভাবে এক-নির্দেশনা-প্রতি-লাইনের বিবৃতিগুলিতে বিভক্ত করবে - মূলত যদি সে এগিয়ে যায় এবং ফলাফলটির সাথে সমান হয় সংকলকটিকে চতুর করে দেওয়ার পরিবর্তে কোডটি কেবল পাঠযোগ্যযোগ্য করে তুলেছে - যা কিছু তারই প্রভাব ফেলেনি। কিন্তু আমার দ্বিমত আছে.
আপনি এখন থেকে আরও এক মাস বা দুটি আরও তিনটি ব্যতিক্রম যুক্ত করলে এটি কত কম পঠনযোগ্য হয়? (উত্তর: এটি অনেক কম পাঠযোগ্য হয়)।
প্রধানতম বিষয়গুলির মধ্যে একটি হ'ল পাঠ্য উত্স কোডটি ফর্ম্যাট করার বেশিরভাগ বিষয় যা আমরা প্রত্যেকে প্রত্যক্ষভাবে খুঁজছি তা হ'ল কোডটি চালিত হওয়ার সময় অন্যান্য মানবদেহে আসলে কী ঘটছে তা সত্যই স্পষ্ট করে তোলা। কারণ সংকলক উত্স কোডটিকে সম্পূর্ণ আলাদা কিছুতে পরিণত করে এবং আপনার কোড বিন্যাসের স্টাইল সম্পর্কে কম যত্ন নিতে পারে না। সুতরাং অল-অন-লাইন সম্পূর্ণরূপে চুষে পায়।
এমনি বলছি...
// super sucks...
catch( Exception ex )
{
if ( ex is FormatException || ex is OverflowException || ex is ArgumentNullException )
{
// write to a log, whatever...
return;
}
throw;
}