আমি এক প্রকার কুইউ প্রয়োগকরণ লিখছি যাতে এমন একটি TryDequeueপদ্ধতি রয়েছে যা বিভিন্ন .NET TryParseপদ্ধতির অনুরূপ প্যাটার্ন ব্যবহার করে, যেখানে আমি পদক্ষেপটি সফল হলে যদি একটি বুলিয়ান মান outফিরিয়ে দিয়েছি এবং প্রকৃত শুল্কযুক্ত মানটি ফিরে পেতে একটি পরামিতি ব্যবহার করি।
public bool TryDequeue(out Message message) => _innerQueue.TryDequeue(out message);
এখন, আমি outযখনই পারব প্যারামগুলি এড়াতে পছন্দ করি। সি # 7 তাদের সাথে কাজ করা আরও সহজ করার জন্য আমাদের পরিবর্তনশীল ডিক্লেয়ারেশনস সরবরাহ করে তবে আমি এখনও একটি কার্যকর সরঞ্জামের চেয়ে প্রয়োজনীয় অপরিহার্য বিষয়গুলি বিবেচনা করি।
এই পদ্ধতিটি থেকে আমি যে আচরণটি চাই তা নীচে:
- যদি কোনও আইটেম প্রাপ্য হয় তবে তা ফিরিয়ে দিন।
- যদি শনাক্ত করার মতো কোনও আইটেম না থাকে (সারিটি খালি), উপযুক্তভাবে কাজ করার জন্য কলারকে পর্যাপ্ত তথ্য সরবরাহ করুন।
- কোনও আইটেম বাকি না থাকলে কেবল কোনও নাল আইটেমটি ফিরিয়ে দেবেন না।
- খালি সারি থেকে বেরিয়ে আসার চেষ্টা করা হলে একটি ব্যতিক্রম ছুঁড়বেন না।
এই মুহুর্তে, এই পদ্ধতির একজন কলার প্রায় সবসময় নীচের মতো একটি প্যাটার্ন ব্যবহার করবেন (সি # 7 আউট ভেরিয়েবল সিনট্যাক্স ব্যবহার করে):
if (myMessageQueue.TryDequeue(out Message dequeued))
MyMessagingClass.SendMessage(dequeued)
else
Console.WriteLine("No messages!"); // do other stuff
যা সবচেয়ে খারাপ নয়, সবাই বলেছে। তবে আমি সাহায্য করতে পারছি না তবে অনুভব করতে পারি যে এটি করার ভাল উপায় আছে (আমি স্বীকার করতে পুরোপুরি ইচ্ছুক যে সেখানে নাও থাকতে পারে)। আমি ঘৃণা করি কীভাবে আহ্বানকারীকে শর্তসাপেক্ষে এটির প্রবাহটি ভেঙে ফেলতে হবে যখন তার উপস্থিতিগুলির একটিই বিদ্যমান থাকলে মান পেতে পারে।
এই একই "চেষ্টা" আচরণ সম্পাদন করার জন্য বিদ্যমান আরও কিছু নিদর্শন কী কী?
প্রসঙ্গে, এই পদ্ধতিটি সম্ভাব্যভাবে ভিবি প্রকল্পগুলিতে ডাকা হতে পারে, তাই এমন কোনও জিনিসের জন্য বোনাস পয়েন্ট যা উভয় ক্ষেত্রেই দুর্দান্ত কাজ করে। যদিও এই সত্যটি খুব কম ওজন বহন করা উচিত।
Option<T>কাঠামো সংজ্ঞায়িত করুন এবং এটি ফিরিয়ে দিন। এইbool Try(..., out data)ফাংশনগুলি একটি ঘৃণা।