সম্প্রতি, আমি বিবৃতিগুলির Dictionariesপরিবর্তে 1-1 টি সম্পর্ককে ম্যাপিংয়ে অগ্রাধিকার দিতে এসেছি Switch। আমি এটি লেখার জন্য আরও দ্রুত এবং মানসিকভাবে প্রক্রিয়া করা সহজ বলে মনে করি। দুর্ভাগ্যক্রমে, যখন কোনও সামগ্রীর নতুন উদাহরণে ম্যাপিং করা হচ্ছে তখন আমি এটিকে সংজ্ঞায়িত করতে চাই না:
var fooDict = new Dictionary<int, IBigObject>()
{
{ 0, new Foo() }, // Creates an instance of Foo
{ 1, new Bar() }, // Creates an instance of Bar
{ 2, new Baz() } // Creates an instance of Baz
}
var quux = fooDict[0]; // quux references Foo
এই কনস্ট্রাক্টটি দেওয়া হয়েছে, আমি সিপিইউ চক্র এবং মেমরিটি 3 টি অবজেক্ট তৈরি করে নষ্ট করেছি, তাদের নির্মাণকারীরা যা কিছু করতে পারে তা করছে এবং কেবল তার মধ্যে একটি ব্যবহার করে শেষ করেছি। আমি আরও বিশ্বাস করি যে fooDict[0]এই ক্ষেত্রে অন্যান্য অবজেক্টগুলিকে ম্যাপিংয়ের ফলে তাদের Fooউদ্দেশ্য হিসাবে কোনও নতুন উদাহরণ তৈরি করার পরিবর্তে একই জিনিসটিকে রেফারেন্স করতে হবে । পরিবর্তে ল্যাম্বডা ব্যবহার করার একটি সমাধান হ'ল:
var fooDict = new Dictionary<int, Func<IBigObject>>()
{
{ 0, () => new Foo() }, // Returns a new instance of Foo when invoked
{ 1, () => new Bar() }, // Ditto Bar
{ 2, () => new Baz() } // Ditto Baz
}
var quux = fooDict[0](); // equivalent to saying 'var quux = new Foo();'
এটি কি এমন জায়গায় পৌঁছাচ্ছে যেটি খুব বিভ্রান্তিকর? ()শেষের দিকে এটি মিস করা সহজ । অথবা কোনও ফাংশন / এক্সপ্রেশনকে ম্যাপিং করা মোটামুটি সাধারণ অভ্যাস? বিকল্পটি হ'ল একটি স্যুইচ ব্যবহার করা:
IBigObject quux;
switch(someInt)
{
case 0: quux = new Foo(); break;
case 1: quux = new Bar(); break;
case 2: quux = new Baz(); break;
}
কোন প্রার্থনা বেশি গ্রহণযোগ্য?
- দ্রুত অনুসন্ধান এবং কম কীওয়ার্ডের জন্য অভিধান (কেস এবং ব্রেক)
- স্যুইচ করুন: কোডে আরও সাধারণত পাওয়া যায়, ইন্ডিরিয়ারেশনের জন্য একটি ফানক <> অবজেক্টের প্রয়োজন হয় না।
fooDict[0] is fooDict[0]) দিয়ে অনুসন্ধান করবেন তখন একই দশা ফিরে আসবে । ল্যাম্বডা এবং স্যুইচ উভয়ই এটির ক্ষেত্রে নয়